MCP tools

The Marvin MCP server speaks JSON-RPC over Streamable HTTP. Every request is a POST to / with a Bearer token and a JSON-RPC body — only the body changes between calls.

RegionMCP server
UShttps://mcp.heymarvin.com/
EUhttps://mcp-eu.heymarvin.com/

Authentication#

MCP tokens need the mcp:read scope and a resource parameter naming the server you're targeting. The audience is checked on every call, so a token minted for the US server won't work against the EU one.

bash
curl -X POST https://app.heymarvin.com/api/v1/oauth/token \
  -d "grant_type=client_credentials" \
  -d "client_id=<YOUR_CLIENT_ID>" \
  -d "client_secret=<YOUR_CLIENT_SECRET>" \
  -d "scope=mcp:read" \
  -d "resource=https://mcp.heymarvin.com"

See Access and authorization for where the client ID and secret come from.

All three headers below are the same on every request:

text
Authorization: Bearer <ACCESS_TOKEN>
Content-Type: application/json
Accept: application/json, text/event-stream

Initialize the session #

The initialize handshake is also the quickest way to confirm your token and audience are right.

bash
curl -X POST https://mcp.heymarvin.com/ \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize",
       "params":{"protocolVersion":"2025-03-26",
       "capabilities":{},
       "clientInfo":{"name":"my-app","version":"0.1"}}}'

A 401 here means the token is missing scope=mcp:read or the matching resource parameter.

List available tools #

tools/list returns the tools your token can reach, with their input schemas.

bash
curl -X POST https://mcp.heymarvin.com/ \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

Call a tool #

tools/call takes the tool name and an arguments object matching that tool's schema. This example calls list_projects, which takes none.

bash
curl -X POST https://mcp.heymarvin.com/ \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
       "params":{"name":"list_projects","arguments":{}}}'

If a tool returns nothing where you expected data, check sharing: the key only reaches projects it has access to. See Troubleshooting.

Next steps#