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
1.8 KiB
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 inadapters/openai/openapi.yaml.
Tool semantics (binding)
get_profession_context: loading cascade 1→2→3; response blocks carrylayerso the agent can state "general X, customer A deviates Y".propose_lesson: validate againstschemas/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 anupdate_ofproposal 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_*: seeservices/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).