Skip to content

Serve governed tools to Claude Desktop and Cursor

The job: give an MCP client (Claude Desktop, Cursor, Windsurf) a set of tools you choose, with the risky ones still behind a person.

Terminal window
npm install matimo
npx matimo mcp setup # writes the Claude Desktop config
npx matimo mcp --tool-paths ./tools # serve your tool directory over stdio

npm install matimo installs the core SDK and the CLI. Provider packages install separately, for example npm install @matimo/slack. For remote agents use --transport http, with a bearer token and TLS. See MCP Server for client configuration for each tool.

Terminal window
# only these tools
npx matimo mcp --tools slack_send_channel_message,slack-list-channels
# everything except this one
npx matimo mcp --exclude postgres-execute-sql

When a call needs approval, the MCP server asks the person using the client through an MCP elicitation request. The call runs only if they accept. A client without elicitation gets an error saying there is no one to ask. The model is never given a way to approve its own call. Details are in Approval over MCP.

  • Matimo does not authenticate your users. You supply the credentials for each tool, through environment variables, .env, Vault or AWS Secrets Manager.
  • Whether approval prompts appear depends on the client supporting elicitation.
  • The matimo mcp command line does not set trustClientApproval or context. Those are programmatic options.
  • MCP Server: transports, client config, secrets, filtering and approval
  • Authentication: how credentials reach a tool call