Connect with MCP
Weir runs a remote MCP server. Point any MCP client at this URL:
https://api.weirapp.io/mcp
There is nothing to install. The server speaks Streamable HTTP, so no client needs a local bridge.
Two ways to authorize
The client decides which one it uses.
- Sign in (OAuth). Chat apps and most coding agents open a browser. You sign in to Weir, approve
the connection, and the client keeps the token. You never copy a key. The connection appears
under API keys as
<client> (MCP). - API key. Anything that runs without a person at a browser sends a Weir key as
Authorization: Bearer weir_live_.... That covers CI,claude -p, the Claude API and OpenAI API connectors, agent frameworks, and n8n.
Pick your client
| Client | Authorizes with | Setup |
|---|---|---|
| Claude (web, Desktop, mobile) | OAuth | Claude and ChatGPT |
| ChatGPT | OAuth | Claude and ChatGPT |
| Claude Code | OAuth or key | Coding agents |
| Codex | OAuth or key | Coding agents |
| Cursor | OAuth | Coding agents |
| VS Code (GitHub Copilot) | OAuth or key | Coding agents |
| Devin Desktop (formerly Windsurf) | OAuth or key | Coding agents |
| Gemini CLI | OAuth or key | Coding agents |
| Zed | OAuth or key | Coding agents |
| Cline | OAuth or key | Coding agents |
| Goose | OAuth or key | Coding agents |
| Continue | Key | Coding agents |
| Claude API (MCP connector) | Key | APIs and frameworks |
| OpenAI Responses API | Key | APIs and frameworks |
| OpenAI Agents SDK | Key | APIs and frameworks |
| LangChain | Key | APIs and frameworks |
| Vercel AI SDK | Key | APIs and frameworks |
| n8n | Key or OAuth | APIs and frameworks |
Claude and ChatGPT cannot send an API key. Cursor ignores one while the server offers sign-in, so it signs in too.
Check that it works
Ask your agent:
What's my Weir usage?
It should call get_usage, which is free, and answer with your credit balance.
Tools
Each tool is named after the API operation it calls, in snake_case: searchReddit is
search_reddit. Every connection gets these:
| Tool | Does | Credits |
|---|---|---|
search_reddit |
Search public Reddit posts | 1 + 3 per Reddit post |
get_reddit_post |
Get one public Reddit post | 1 + 3 per Reddit post |
get_subreddit |
Get information about a public subreddit | 1 + 1 per subreddit |
search_subreddit |
Search posts within one subreddit | 1 + 3 per Reddit post |
get_reddit_comments |
Get a Reddit comment tree as a flat list, page by page | 1 + 3 per Reddit comment |
get_subreddit_posts |
List a community's posts: hot, new, rising, top, or controversial | 1 + 3 per Reddit post |
get_subreddit_comments |
Read a community's newest comments, across every post | 1 + 3 per Reddit comment |
search_subreddits |
Find communities by name or topic | 1 + 1 per subreddit |
get_reddit_user |
Get a Reddit account's public profile | 1 + 1 per Reddit user |
get_reddit_user_posts |
List the posts an account has submitted | 1 + 3 per Reddit post |
get_reddit_user_comments |
List the comments an account has made | 1 + 3 per Reddit comment |
lookup_reddit |
Fetch up to 100 posts and comments, and 100 communities, in one call | 1 + 3 per Reddit post + 3 per Reddit comment + 1 per subreddit |
search_x |
Search public X posts with composable filters | 1 + 1 per X post |
get_x_posts |
Get up to 100 public X posts by id | 1 + 1 per X post |
get_x_post |
Get one public X post | 1 + 1 per X post |
get_x_replies |
Get replies to an X post | 1 + 1 per X post |
get_x_thread |
Get the author's thread containing a post | 1 + 1 per X post |
get_x_quotes |
Get posts quoting an X post | 1 + 1 per X post |
get_x_retweeters |
Get accounts that reposted an X post | 1 + 1 per X user result |
get_x_post_edits |
Get the edit history of an X post | 1 + 1 per X post |
get_x_users |
Get up to 100 public X profiles by id | 1 + 2 per X profile |
search_x_users |
Search X accounts | 1 + 1 per X user result |
get_x_user |
Get a public X profile | 1 + 2 per X profile |
get_x_user_about |
Get an X account's "About this account" details | 1 + 2 per X profile |
get_x_user_posts |
Get a public X user timeline | 1 + 2 per X profile + 1 per X post |
get_x_user_replies |
Get an X account's posts and replies | 1 + 2 per X profile + 1 per X post |
get_x_user_media |
Get an X account's posts with media | 1 + 2 per X profile + 1 per X post |
get_x_user_highlights |
Get the posts an X account highlights | 1 + 2 per X profile + 1 per X post |
get_x_user_followers |
Get an X account's followers | 1 + 2 per X profile + 1 per X user result |
get_x_user_following |
Get the accounts an X account follows | 1 + 2 per X profile + 1 per X user result |
get_x_user_affiliates |
Get an organisation's affiliated X accounts | 1 + 2 per X profile + 1 per X user result |
get_x_user_subscriptions |
Get the creators an X account subscribes to | 1 + 2 per X profile + 1 per X user result |
get_x_list |
Get a public X List | 1 + 2 per X list |
get_x_list_members |
Get the members of a public X List | 1 + 1 per X user result |
get_x_list_posts |
Get the timeline of a public X List | 1 + 1 per X post |
get_x_space |
Get an X Space | 1 + 2 per X space |
get_usage |
Credit balance, holds, and this month's free grant | Free |
get_limits |
Ceilings imposed by the account's tier | Free |
get_identity |
Identify the account and scopes behind this key | Free |
Credits are per call plus per result returned, the same as the REST API. A failed or refused call
costs nothing. Each tool returns the same response shapes as the endpoint
behind it, and paged tools take the cursor from meta.nextCursor.
These appear only on a connection that was granted monitor or webhook access when it was approved:
| Tool | Does | Credits |
|---|---|---|
list_monitors |
List monitors | Free |
create_monitor |
Create a monitor | Free |
get_monitor |
Get one monitor | Free |
update_monitor |
Update a monitor | Free |
delete_monitor |
Delete a monitor | Free |
list_monitor_results |
List deduplicated results a monitor has found | Free |
list_monitor_runs |
List a monitor's execution history | Free |
run_monitor |
Queue a monitor run immediately | Free |
list_webhooks |
List webhooks | Free |
create_webhook |
Create a webhook | Free |
update_webhook |
Update a webhook | Free |
delete_webhook |
Delete a webhook | Free |
test_webhook |
Queue a test delivery | Free |
list_webhook_deliveries |
List recent delivery attempts | Free |
They are separate because a monitor keeps running, and spending credits, after the agent stops.
Revoking
Every signed-in connection appears under API keys as
<client> (MCP). Revoke it there and it stops working. A client that connected with an API key
stops when you revoke that key.
Troubleshooting
- Claude cannot reach the server. Claude connects from Anthropic's cloud, not your machine, so
the URL must be public.
claude_desktop_config.jsonis for local servers and does not take this URL. - The free Claude plan allows one custom connector. Remove another to add Weir.
- Cursor ignores the key in
mcp.json. Expected. Remove the header and sign in. - Cline will not connect. Set
"type": "streamableHttp". Without it Cline uses the older SSE transport. - n8n answers
405. Set the MCP Client Tool's server transport to HTTP Streamable. - A tool returns
402. The account is out of credits. Only a person can clear it, by adding credits at https://weirapp.io/dashboard/billing. Retrying never will.
What agents get wrong
Worth putting in your system prompt:
- Start at
limit: 10. Widen once the results look right. - Never retry a
402. Only a person can clear it, by adding credits. - Filter in the query, not afterwards. Every result returned is billed, including the ones you discard.
- Read the cost of an unfamiliar call before looping on it.