WIP MCP Server
Let your AI agent search your todos and post what you shipped. Works with Claude, ChatGPT, Cursor, Claude Code and any other MCP client.
Endpoint
Streamable HTTP transport. Every request is authenticated: connect with OAuth (recommended, your client walks you through signing in to WIP) or with an API key. The MCP server is part of the WIP API, so it requires a Pro account.
Connect your client
Claude Code
Then run /mcp inside Claude Code to sign in.
Claude (web and desktop)
Settings → Connectors → Add custom connector. Name it WIP, paste the endpoint above, and sign in when prompted.
Cursor
Add this to .cursor/mcp.json, then approve the sign-in prompt:
{
"mcpServers": {
"wip": { "url": "https://api.wip.co/mcp" }
}
}
ChatGPT
Settings → Connectors → Create, with developer mode enabled. Paste the endpoint above and sign in when prompted.
Using an API key instead of OAuth
Any client that can send custom headers can authenticate with an API key instead:
Tools
| Tool | What it does |
|---|---|
| search_todos | List and search todos (shipped updates), newest first. Defaults to the authenticated user's own todos; pass user for someone else's public todos, or project for a project's todos. Filter by keywords and date, and page with after. |
| get_todo | Fetch one todo by id (todo_...), including its creator, project and attachments. |
| create_todo | Post a completed todo to the authenticated user's WIP profile. Write the body in the past tense as something that shipped, and include a project #hashtag (see list_projects) to link it to that project. Attach media with attachment_urls (public URLs fetched server-side) or attachments (signed ids from create_upload). |
| create_upload | Reserve a direct upload for a file to attach to a todo. Returns a short-lived PUT url, the headers to send with it, and a signed_id. Upload the raw bytes yourself outside MCP, sending every returned header verbatim, e.g. curl -X PUT --data-binary @screenshot.png -H "Content-Type: image/png" -H "Content-MD5: <checksum>" "<url>" then pass signed_id in create_todo attachments. checksum is the base64 MD5 of the file (openssl dgst -md5 -binary screenshot.png | base64). Do not base64-encode the file itself. The url expires after a few minutes, so upload one file at a time right after calling this. |
| get_user | Fetch a maker's profile, including their current and best streak and todo count. Defaults to the authenticated user. |
| list_projects | List a maker's projects with their hashtags, newest first. Defaults to the authenticated user's projects; use the hashtag in a create_todo body to link the todo to the project. |
| get_project | Fetch one project by slug or id (proj_...), including its makers and hashtag. |
Attaching screenshots and videos
Two options, both described in the tool schemas so your agent picks them up on its own:
- Public URL: pass image or video URLs as
attachment_urlsoncreate_todoand we download them (up to 5 per todo, 10 MB each). - Local file: the agent calls
create_upload, uploads the bytes with curl, and passes the returnedsigned_idtocreate_todo. Works in coding agents like Claude Code and Codex.
Try asking your agent
- "What did I ship on WIP last week?"
- "Post a todo for the feature we just merged, with a screenshot."
- "Search my WIP todos for everything about onboarding."
- "How is my streak doing?"
Limits
Up to 120 requests per minute per account. Todos created through the MCP server are attributed to your API key or the connected app, like every other API integration. The API terms apply.