What does an MCP server audit check?
Ours covers three layers. The skill and repository: frontmatter, structure, examples, and governance. Runtime behavior: what the tools actually do on real calls, including races, error messages, and response shapes. The MCP spec and the server's response contract: declared primitives, protocol version, auth headers, tool annotations, and whether each response matches its own tool description.
Is an MCP audit the same as a security audit?
No. Security is part of it: on kobiton/automate we covered OAuth declarations, the 401 challenge header, and repository governance such as Dependabot and CodeQL. It is not a penetration test. Most findings were about behavior an agent relies on, like a tool description promising fields the server never returns.
What are MCP tool annotations and why do they matter?
Annotations are hints on each tool: readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. Clients use them to decide when to ask the user for confirmation and whether a call is safe to retry. kobiton/automate declared only the first two, so we filed pull request #74 adding idempotentHint and openWorldHint to all 12 tools, and Kobiton merged it.
How do you review a Claude Code plugin that also runs in other agent CLIs?
We check the plugin against each host it claims to support, not only Claude Code. kobiton/automate runs in Claude Code, Copilot CLI, Gemini CLI, Cursor CLI, and Codex CLI, so we filed install paths for Cursor, ChatGPT, and Continue, added a Claude surface compatibility matrix, and wrote about AGENTS.md as the shared brief across tools.
How do you keep an MCP server current as the spec changes?
We file advisories when the ground moves. For kobiton/automate we mapped the MCP 2026-07-28 release candidate to earlier findings, flagged the Gemini CLI sunset, and flagged Claude enterprise changes that affect deployment, each as a public issue.
What do we get at the end of an audit?
Findings filed where your team already works, as GitHub issues with a START HERE issue per pass giving the reading order, plus pull requests for the fixes we can make from outside. Your maintainers decide what merges.