Wren MCP

JSON-RPC examples

Raw requests against the live server. Responses shown are real output; long ones are shortened with an ellipsis.

1. Initialize

Request
curl -s https://mcp.wrenapp.ai/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'
Response
{
  "result": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "tools": { "listChanged": true },
      "resources": { "listChanged": true }
    },
    "serverInfo": { "name": "wren", "version": "0.1.0" }
  },
  "jsonrpc": "2.0",
  "id": 1
}

2. List tools

Returns every tool with its input schema, annotations and security schemes. To print just the names (needs jq):

Request
curl -s https://mcp.wrenapp.ai/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
  | sed 's/^data: //' | grep '^{' \
  | jq -r '.result.tools[].name'
Response
get_profile
connect_account
create_handwritten_note
render_note_preview
list_notes
get_note
add_page
edit_page
update_note
get_drawing_guide

3. Read the drawing guide (no token)

Request
curl -s https://mcp.wrenapp.ai/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_drawing_guide","arguments":{}}}'
Response (text content, shortened)
# Wren drawing guide

Wren turns structured content into real handwriting (editable pen strokes) in the user's Wren notebook.
Use this guide to pick a kind and fill the arguments of create_handwritten_note, add_page or edit_page.

## Rules
- Wren DRAWS the content you specify — it never invents content. ...
- Graphs: figure.content.prompt holds the equation ("y = sin(x)", "y = x^2 - 4", "y = e^x"). ...

## Kinds (13)

### graph_2d
...

4. Call a protected tool with no token

Request
curl -s https://mcp.wrenapp.ai/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_profile","arguments":{}}}'
Response
HTTP/2 401
www-authenticate: Bearer resource_metadata="https://mcp.wrenapp.ai/.well-known/oauth-protected-resource/mcp", error="invalid_token", error_description="Link your Wren account", scope="notes.read notes.write profile.read"

{"jsonrpc":"2.0","error":{"code":-32001,"message":"Link your Wren account to continue."},"id":3}

This is where OAuth starts. See Authentication.

5. Create a note (needs a token with notes.write)

Set WREN_ACCESS_TOKEN to an access token obtained through the OAuth flow, then:

Terminal
curl -s https://mcp.wrenapp.ai/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -H "authorization: Bearer $WREN_ACCESS_TOKEN" \
  -d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"create_handwritten_note","arguments":{"title":"Quadratics","figure":{"kind":"graph_2d","content":{"prompt":"y = x^2 - 4"}}}}}'

The result reports the note title and page number in its location, and the note appears in the user’s notebook and syncs to their iPad. Swap in any tool from the tool reference.

6. GET is not supported

The server is stateless and POST-only:

Response to GET
HTTP/2 405

{"jsonrpc":"2.0","error":{"code":-32000,"message":"Method not allowed (stateless MCP server)."},"id":null}