Skip to content

feat(mcp): human titles + tool annotations on all 63 tools - #189

Merged
ralyodio merged 1 commit into
mainfrom
feat/mcp-tool-annotations
Nov 11, 2026
Merged

ralyodio merged 1 commit into
mainfrom
feat/mcp-tool-annotations

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

Adds a human title and explicit annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to every one of the 63 myna MCP tools, for the Claude Connectors Directory.

  • One HINTS table in packages/mcp/src/tools.ts; TOOLS is the old table with title + annotations merged in, so the stdio server (SDK) and /api/mcp both serve them. A tool without an entry throws at load.
  • Names, input schemas and behaviour unchanged.
  • Rules: reads are readOnly and not destructive. Posting, sending email/newsletters, directory submissions, agenticjobs updates, upvote casting, deletes and overwrites are destructive. openWorld when the tool reaches a network, site, the writer or a plugin hook.
  • tools/list already carries resultType/ttlMs/cacheScope; the new test keeps it that way.

Local evidence (this repo has no PR CI):

  • bun test apps/api/test/mcp-annotations.test.ts: 3 pass, 486 expects
  • stdio bun packages/mcp/src/server.ts tools/list: 63 tools, 63 with title + all hints
  • bun run typecheck: clean
  • bun run test: 913 pass, 1 fail (openconnection.test.ts nichedb forums, fails the same on main; unrelated)

🤖 Generated with Claude Code

Claude's Connectors Directory requires a title and readOnlyHint /
destructiveHint / openWorldHint on every tool. Each tool now carries a
title and annotations (plus idempotentHint) from one HINTS table in
packages/mcp/src/tools.ts, which both the stdio server and the HTTP
/api/mcp transport serve. Names, schemas and behaviour are unchanged.
Posting, sending email, directory submissions, deletes and overwrites
are destructive; reads are readOnly; anything that reaches a network,
site, the writer or a hook is openWorld. A tool missing from HINTS
fails at load.

Test: apps/api/test/mcp-annotations.test.ts asserts every listed tool
has a title + all hints and that tools/list keeps resultType/ttlMs/
cacheScope.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

0 finding(s) in the 2 file(s) this pull request changes.

Nothing in the files this pull request changes.

123 pre-existing finding(s) elsewhere in the repository — **HIGH**: 5 | **MEDIUM**: 79 | **LOW**: 39

Not introduced by this pull request.

Severity Rule Location
HIGH secret-database-url README.md:1556
HIGH secret-database-url README.md:1646
HIGH js-electron-node-integration apps/desktop/src/main.cjs:33
HIGH js-ssrf-outbound-request apps/web/src/proxy.ts:58
HIGH secret-database-url docker-compose.yml:4
MEDIUM sql-template-interpolation apps/api/src/atproto.ts:63
MEDIUM sql-template-interpolation apps/api/src/atproto.ts:101
MEDIUM sql-template-interpolation apps/api/src/atproto.ts:121
MEDIUM sql-template-interpolation apps/api/src/cloud.ts:51
MEDIUM sql-template-interpolation apps/api/src/cloud.ts:118
MEDIUM sql-template-interpolation apps/api/src/cloud.ts:133
MEDIUM sql-template-interpolation apps/api/src/cloud.ts:134
MEDIUM sql-template-interpolation apps/api/src/cloud.ts:135
MEDIUM sql-template-interpolation apps/api/src/cloud.ts:138
MEDIUM sql-template-interpolation apps/api/src/cloud.ts:168
MEDIUM sql-template-interpolation apps/api/src/cloud.ts:175
MEDIUM sql-template-interpolation apps/api/src/cloud.ts:182
MEDIUM sql-template-interpolation apps/api/src/handoff.ts:71
MEDIUM sql-template-interpolation apps/api/src/handoff.ts:84
MEDIUM sql-template-interpolation apps/api/src/handoff.ts:85

…and 103 more; the full set is in the SARIF artifact.

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit 1916dcf into main Nov 11, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant