From ee82cc2efc522995274d50cda1d44d961ab9a6d6 Mon Sep 17 00:00:00 2001 From: Harlan Wilton Date: Wed, 7 Oct 2026 12:56:21 +1100 Subject: [PATCH] fix(mcp): add annotation titles for the Claude directory The Claude directory portal flagged every tool for a missing annotations.title. It reads the title from the annotations as well as from the tool, so the handler now sets both from one value. The search_skills description no longer names get_skill. The directory compliance step asks that descriptions say nothing about other tools. Adding the connector in Claude takes two more steps than /developers listed: keep No sign-in, select Add, then select Connect. --- layers/marketing/app/pages/developers.vue | 2 +- layers/mcp/server/mcp/index.ts | 3 ++- layers/mcp/shared/mcp-tools.ts | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/layers/marketing/app/pages/developers.vue b/layers/marketing/app/pages/developers.vue index b29752ef..1805f445 100644 --- a/layers/marketing/app/pages/developers.vue +++ b/layers/marketing/app/pages/developers.vue @@ -229,7 +229,7 @@ const uiClass = 'font-medium text-default' class="min-h-11 hover:bg-primary-600 active:bg-primary-700" />

- Claude opens the Add custom connector dialog with skilld filled in. Check the name and the server URL, then confirm. In a chat, open the + menu, select Connectors, and check that skilld is on. + Claude opens the Add custom connector dialog with skilld filled in. Select Continue, keep No sign-in, and select Add. Then select Connect. In a chat, open the + menu, select Connectors, and check that skilld is on.

Or open Customize > Connectors in claude.ai or the Claude desktop app. Select Add custom connector, name it skilld, and paste the server URL. diff --git a/layers/mcp/server/mcp/index.ts b/layers/mcp/server/mcp/index.ts index 1b711813..303fdd4c 100644 --- a/layers/mcp/server/mcp/index.ts +++ b/layers/mcp/server/mcp/index.ts @@ -21,7 +21,8 @@ export default defineMcpHandler({ title: tool.title, description: tool.description, inputSchema: tool.inputSchema, - annotations: tool.annotations, + // Claude's directory reads the title from the annotations as well. + annotations: { title: tool.title, ...tool.annotations }, handler: (args, extra) => tool.run(deps, args, extra.signal), })) }, diff --git a/layers/mcp/shared/mcp-tools.ts b/layers/mcp/shared/mcp-tools.ts index 2f525c2e..4b1e3802 100644 --- a/layers/mcp/shared/mcp-tools.ts +++ b/layers/mcp/shared/mcp-tools.ts @@ -135,7 +135,7 @@ const SearchArgs = z.object({ const searchSkills: McpTool = { name: 'search_skills', title: 'Search Skills', - description: 'Search the skilld.dev registry for agent skills that match a topic. A skill is a SKILL.md file that a maintainer publishes in their own GitHub repository, and it works with any coding agent. Returns each match with its source repository, GitHub star count, skilld.dev page, and run command. get_skill returns the full provenance of one match.', + description: 'Search the skilld.dev registry for agent skills that match a topic. A skill is a SKILL.md file that a maintainer publishes in their own GitHub repository, and it works with any coding agent. Returns each match with its source repository, GitHub star count, skilld.dev page, and run command.', inputSchema: SearchArgs.shape, annotations: { readOnlyHint: true,