Connect your AI to SubReply
SubReply exposes its six Reddit prospecting tools over a Model Context Protocol server, the standard spoken by Claude, ChatGPT, Gemini and n8n. Connect it in thirty seconds and your assistant searches, writes then publishes without you writing a single HTTP request.
One endpoint, POST only, streamable HTTP transport with no session:
https://subreply.io/api/mcpTwo ways to authenticate: OAuth for the connectors of consumer assistants, an API key for everything else.
OAuth connection (recommended) — claude.ai, ChatGPT, Gemini
The shortest path, with no key to copy anywhere. The connector sends you to SubReply, you sign in with your usual account and it is plugged in.
Settings → Connectors → Add custom connector- Paste the URL:
https://subreply.io/api/mcp - Connect → SubReply sign-in → Approve
Settings → Developer Mode → Apps → New connector- URL:
https://subreply.io/api/mcp, authOAuth - Requires a Pro, Business, Enterprise or Edu plan
Google AI Studio → Extensions → Custom MCP- URL:
https://subreply.io/api/mcp - Authentication through SubReply OAuth
The approval lasts 30 days. After that the client reopens the same screen, and one click is enough to carry on.
Publishing is not available over OAuth
publish_reddit_comment turns down OAuth connections: writing to Reddit needs an API key whose publishing permission is switched on in your API settings. The other five tools work as usual.API key connection — Claude Code, Claude Desktop, n8n
The key travels in the Authorization header. Every request is re-authenticated, so revoking a key cuts it off that very moment rather than when some session expires. It is the same sr_live_… key as the REST v1 API, generated on your API keys page.
Claude Code and Claude Desktop
claude mcp add --transport http subreply https://subreply.io/api/mcp \
--header "Authorization: Bearer sr_live_YOUR_API_KEY"Or straight into the MCP configuration file, if you would rather keep it in version control:
{
"mcpServers": {
"subreply": {
"type": "http",
"url": "https://subreply.io/api/mcp",
"headers": {
"Authorization": "Bearer sr_live_YOUR_API_KEY"
}
}
}
}n8n
Add an MCP Client node and fill in four fields:
Endpoint—https://subreply.io/api/mcpServer Transport—HTTP StreamableAuthentication—Header Auth- Header Auth credential — name
Authorization, valueBearer sr_live_…
The node then lists all six tools. Mind the timeout: publish_reddit_comment can take two minutes, well beyond the n8n default.
Checking that it answers
When a client refuses to connect, this call settles the question: it depends on no MCP client and spends no credits.
curl -s -X POST https://subreply.io/api/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer sr_live_YOUR_API_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'Six tools listed means the server is fine and the problem sits on the client side. A 401 means the key. A 406 means the Accept header: the transport requires both types, even though it answers with plain JSON. The ping tool does the same job once your client is connected: it answers pong and proves your key works at the same time.
Available tools
| Tool | What it does | Credits | Worth knowing |
|---|---|---|---|
ping | Availability probe. Answers “pong” and confirms the key is valid. | free | — |
get_account_status | Credit balance and subscription state. The tool to call when another one answers “not enough credits”. | free | — |
list_projects | Projects on the account: id, name, target language, keywords, agent state. | free | — |
scrape_reddit_opportunities | Scans subreddits and returns posts whose author looks like a customer, scored by relevance. | free | product_description strongly recommended |
generate_reddit_comment | Writes a natural comment, in the language of the thread, built not to trigger a shadowban. Publishes nothing. | 35 | Idempotent on post_url |
publish_reddit_comment | Publishes for real on Reddit, from a SubReply pool account behind a residential proxy. | 50 | Per-key opt-in required |
Same economics as the REST API: searching is free, only production is billed. A scan that finds nothing therefore never costs anything.
Scanning is free, but not open to everyone
get_account_status and list_projects stay callable at zero credits. That is precisely their point.Charges are idempotent per post: if the network drops and your agent replays generate_reddit_comment on the same Reddit URL, the second call returns credits_used: 0.
Rate limits
| Tool | Limit |
|---|---|
scrape_reddit_opportunities | 60 calls / minute |
generate_reddit_comment | 20 calls / minute |
publish_reddit_comment | 5 calls / minute |
get_account_statuslist_projects | 60 calls / minute |
ping | none |
Quotas are counted per account and per tool: exhausting generate_reddit_commentthrottles neither your other tools nor anyone else's account. ping is deliberately unlimited — it is the probe, and it has to stay reachable exactly when you are hammering it because you suspect an outage.
Publishing to Reddit
publish_reddit_comment really writes to Reddit
The comment is public the moment the tool returns, posted from a SubReply pool account behind a residential proxy. Deleting it does not undo the notification already sent to the poster. Only call this tool once a human has approved the exact text.
Which is why it is off by default. To turn it on, open your API keys page and enable publishing on the key in question.
The permission lives on the key, not on the account, and that is deliberate: a key dedicated to an n8n publishing workflow can have it while a key pasted into a conversational assistant does not. After a leak, turning publishing off on that one key breaks none of your other integrations.
- 5 calls per minute at most, far below what the infrastructure would take. A burst of publications does not just cost a balance: it costs a shadowban.
- The 50 credits are charged afterwards, once publication is confirmed. A failure bills nothing.
- This tool is not idempotent: two calls on the same URL leave two comments. The second one is free, but it is very much there.
- Allow up to two minutes per call — a real browser opens the post and types the comment. Set your client timeout accordingly.
MCP-specific errors
A failing tool never raises a JSON-RPC exception: it returns a result flagged isError: true, with a sentence the agent can read. Four cases exist only on the MCP side.
| Case | What the tool returns |
|---|---|
| Rate limit exceeded | isError: true and the retry delay in seconds. Nothing is charged. |
| Not enough credits | isError: true and the missing balance. Top up on the billing page. |
publish_reddit_comment without opt-in | isError: true: publishing is off on that key. Turn it on in your API settings. |
publish_reddit_comment over OAuth | isError: true: publishing requires an API key, an OAuth connection is not enough. |
The rate limit message carries the retry delay, so your agent knows when to pick back up instead of looping:
Rate limit exceeded for generate_reddit_comment:
20 calls per minute maximum. Retry in 34 seconds.
No credits were charged.The refusal lands before any business logic: nothing is called, nothing is charged. An agent that burns through its 20 generations per minute has lost no credits.
An empty list is not an error
scrape_reddit_opportunities filters on freshness, customer signal and product fit. Zero results is a normal answer. Passing product_description changes a great deal — without it the product fit threshold rejects almost everything.HTTP codes and the REST error format are described on the error codes page.
Full error codes