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.
1. Start the server
Section titled “1. Start the server”npm install matimonpx matimo mcp setup # writes the Claude Desktop confignpx matimo mcp --tool-paths ./tools # serve your tool directory over stdionpm 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.
2. Decide what is visible
Section titled “2. Decide what is visible”# only these toolsnpx matimo mcp --tools slack_send_channel_message,slack-list-channels
# everything except this onenpx matimo mcp --exclude postgres-execute-sql3. Keep risky calls behind a person
Section titled “3. Keep risky calls behind a person”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.
Limits
Section titled “Limits”- 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 mcpcommand line does not settrustClientApprovalorcontext. Those are programmatic options.
Read next
Section titled “Read next”- MCP Server: transports, client config, secrets, filtering and approval
- Authentication: how credentials reach a tool call