Files
skillfactor-pipeline/services/skillfactor-mcp/tools.json
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

80 lines
4.1 KiB
JSON

{
"tools": [
{
"name": "get_profession_context",
"description": "Load the knowledge cascade for a profession: community profile (layer 1), then the caller's org overlay (layer 2), then the active project's lessons (layer 3). More specific beats more general; the response marks each block's layer.",
"inputSchema": {
"type": "object",
"required": ["profession"],
"properties": {
"profession": { "type": "string", "description": "profession slug, e.g. project-manager" },
"competence": { "type": "string", "description": "optional competence slug or ESCO URI to narrow the context" },
"org": { "type": "string", "description": "org repo (owner/name); omit for community-only" },
"customer": { "type": "string" },
"project": { "type": "string" }
}
}
},
{
"name": "propose_lesson",
"description": "Submit a user-confirmed lesson as a pull request (never a direct commit). Runs the duplicate check in the target folder first and returns either the created PR link or the similar existing lesson with an update proposal. Enforces schemas/lesson.schema.json and rejects layer-1 submissions containing customer/company/person references.",
"inputSchema": {
"type": "object",
"required": ["layer", "profession", "competences", "title", "body_markdown", "source"],
"properties": {
"layer": { "enum": [1, 2, 3] },
"profession": { "type": "string" },
"competences": { "type": "array", "items": { "type": "object",
"properties": { "esco_uri": {"type": "string"}, "onet_soc": {"type": "string"} },
"required": ["esco_uri"] } },
"customer": { "type": "string", "description": "required for layer 3" },
"project": { "type": "string", "description": "required for layer 3" },
"title": { "type": "string" },
"body_markdown": { "type": "string", "description": "the FULL text the user confirmed, word for word" },
"source": { "enum": ["conversation", "m365-mail", "m365-chat", "m365-transcript", "promotion"] },
"source_refs": { "type": "array", "items": { "type": "string" } },
"update_of": { "type": "string", "description": "path of an existing lesson to update instead of creating a new file" }
}
}
},
{
"name": "suggest_promotion",
"description": "Scan an org repo for insights that appear in >= 2 projects (competence-URI + similarity match) and return promotion candidates (project -> overlay), plus overlay entries without company specifics as candidates for an anonymized community distillate. Suggestions only — nothing is moved automatically.",
"inputSchema": {
"type": "object",
"required": ["org"],
"properties": {
"org": { "type": "string" },
"profession": { "type": "string" }
}
}
},
{
"name": "m365_list_new_items",
"description": "M365 mining (read-only SQL): list unprocessed mails/chats/transcripts for a consenting user since the last run. Returns metadata + opaque item ids only.",
"inputSchema": {
"type": "object",
"required": ["user_id"],
"properties": {
"user_id": { "type": "string" },
"kinds": { "type": "array", "items": { "enum": ["mail", "chat", "transcript"] } },
"since": { "type": "string", "format": "date-time" },
"limit": { "type": "integer", "default": 50 }
}
}
},
{
"name": "m365_extract_lesson_candidates",
"description": "Run the distillation prompt over given item ids (raw text stays inside the service; only distillates leave). Applies the anonymization rules at extraction time and proposes customer/project assignment from metadata. Returns candidates for the review queue — never commits anything.",
"inputSchema": {
"type": "object",
"required": ["user_id", "item_ids"],
"properties": {
"user_id": { "type": "string" },
"item_ids": { "type": "array", "items": { "type": "string" } }
}
}
}
]
}