You wrote this once, on the day the tool was born:
{
"name": "search_docs",
"annotations": {
"readOnlyHint": true,
MCP tools declare readOnlyHint, destructiveHint, and openWorldHint, and clients act on them. actlint is a static linter that checks those labels against what each tool's schema says it can do. We ran it on 31 popular servers.
You wrote this once, on the day the tool was born:
{
"name": "search_docs",
"annotations": {
"readOnlyHint": true,

Our MCP tool passed every server-side test, then Claude refused to call it. A debugging story about outputSchema and what E2E…

Originally published at tengli.dev Your MCP server can be 100% spec-compliant and still be unusable...

MCP servers expose tools to LLMs, but most configs grant tools broader permissions than they need,...

Every tool you expose over MCP ships its full definition (name, description, JSON schema) into the...

MCP servers are starting to look like infrastructure. That means the old readiness question is no...

A deep-dive companion to Part 4: your first MCP server. Part of Claude Code, Beyond the...