Files
skillfactor-pipeline/services/skillfactor-mcp/SPEC.md
skillfactor-pipeline 7a72e45b93 feat(arch): openai/gemini adapter scaffolds + MCP gateway + M365 mining specs
Same canonical content, three thin adapters; FastMCP scaffold with the
five gateway tools (layer-1 guard enforced by the lesson schema); M365
spec with assumed minimal DDL, read-only queries, extraction-time
anonymization and a review-queue with no auto-merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PDKeXvpT6tENSvyQGLV1Uq
2026-07-10 05:42:21 +02:00

1.8 KiB

SkillFactor MCP gateway — spec

One MCP server serves Claude, ChatGPT and Gemini (ARCHITECTURE.md §2). Base: the official gitea-mcp server (repo read/write, PR creation), extended with the SkillFactor tools in tools.json.

Composition

[agent] --MCP--> skillfactor-mcp ----> gitea-mcp (repos, PRs)
                        |------------> MSSQL (m365 mining, read-only)
                        |------------> schemas/ (lesson validation)
  • Env (.env.example): GITEA_URL, GITEA_TOKEN (scoped), M365_SQL_CONN (read-only login), COMMUNITY_REPO, ORG_REPO_PATTERN.
  • HTTP facade for non-MCP write paths (ChatGPT Actions): POST /actions/propose_lesson, GET /actions/profession_context — same handlers, OpenAPI in adapters/openai/openapi.yaml.

Tool semantics (binding)

  • get_profession_context: loading cascade 1→2→3; response blocks carry layer so the agent can state "general X, customer A deviates Y".
  • propose_lesson: validate against schemas/lesson.schema.json; layer-1 guard: reject if customer/project fields present OR the body matches org/customer name lists; duplicate check = same competence URI + title-token similarity ≥ 0.6 in the target folder → return the match with an update_of proposal instead of creating; then branch + commit + PR via gitea-mcp. NEVER commit to main.
  • suggest_promotion: read-only analysis; output is a list of candidate pairs with evidence paths. The move itself goes through propose_lesson (source: promotion, promoted_from set).
  • m365_*: see services/m365-mining/SPEC.md; consent flag checked on every call; raw text never in responses beyond the distillate fields.

Status

server.py is a runnable FastMCP scaffold with the five tools as stubs (validation + gitea calls marked TODO). Full implementation is a follow-up decision (see REPORT).