Server reference
For people building MCP clients and agents. If you use Claude, ChatGPT or another off-the-shelf client, you don’t need any of this.
- Endpoint
- https://api.adventur.ai/mcp
- Transport
- Streamable HTTP, stateless, JSON responses
- Protocol versions
- 2025-11-25, 2025-06-18, 2025-03-26
- Authentication
- OAuth 2.1 bearer tokens (PKCE S256, dynamic client registration)
- Server name
- adventurai (AdVentur.ai)
- Tools
- 65, filtered by the connection's scopes
Transport
Section titled “Transport”The server speaks Streamable HTTP at a single endpoint, https://api.adventur.ai/mcp. It is stateless: send JSON-RPC 2.0 messages with POST, and every response is a single application/json body rather than an SSE stream. There are no session IDs and no server-initiated messages, so any HTTP client works and requests can be retried. JSON-RPC batches (an array of messages) are accepted. GET and DELETE return 405, since there is no stream to open and no session to end. Browser requests from origins other than AdVentur.ai and known MCP clients get 403.
curl -s https://api.adventur.ai/mcp \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -H "MCP-Protocol-Version: 2025-11-25" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Send MCP-Protocol-Version on every request after initialize. An unsupported version gets 400.
Methods
Section titled “Methods”| Method | Notes |
|---|---|
initialize |
Returns server info, capabilities (tools), the negotiated protocol version and the server instructions below. |
notifications/initialized |
Accepted with 202. |
ping |
Returns an empty result. |
tools/list |
The tools the token’s scopes allow, with JSON Schema inputs and annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint). |
tools/call |
Runs one tool. Results are a single text content item holding JSON. |
Discovery
Section titled “Discovery”| URL | What it is |
|---|---|
https://api.adventur.ai/.well-known/oauth-protected-resource/mcp |
RFC 9728 protected resource metadata for the MCP endpoint. |
https://api.adventur.ai/.well-known/oauth-authorization-server |
RFC 8414 authorization server metadata. |
https://api.adventur.ai/oauth/register |
Dynamic client registration. |
https://api.adventur.ai/oauth/authorize |
Authorization endpoint (PKCE S256 required). |
https://api.adventur.ai/oauth/token |
Token endpoint (authorization_code, refresh_token). |
https://api.adventur.ai/oauth/revoke |
Token revocation. |
See Authentication and permissions for the full flow.
Errors
Section titled “Errors”- Transport and auth errors are HTTP statuses.
401means a missing, expired or revoked token and carries aWWW-Authenticateheader pointing at the resource metadata; refresh the token or sign in again. - Protocol errors (unknown method, bad params, unknown tool) are JSON-RPC errors. Calling a tool whose scope wasn’t granted returns an
invalid paramserror that names the missing permission. - Tool errors come back as a normal result with
isError: trueand a JSON text body such as{"status":422,"error":"…"}, so the model can read what went wrong and fix its input. Common statuses:400/422invalid input,402the plan doesn’t allow it or credits ran out,403missing permission,404not found,409conflict (for example the post was already approved),429rate limited.
Rate limits
Section titled “Rate limits”Each user can make 60 tool calls a minute across all their connections. Individual tools can have tighter limits (research and media imports, for example). Over the limit, the call returns a tool error reading Rate limit exceeded. Retry after N seconds.
Server instructions
Section titled “Server instructions”Sent with initialize so models know how the tools fit together. When some tools are hidden because their scope wasn’t granted, the server appends a note naming them.
Tools act on the AdVentur.ai workspace the user connected, limited to the permissions they granted.
Read tools cover the home brief, inspiration opportunities, strategy, posts, analytics and connected accounts.
To schedule a post:
create_draft_post(lands in Review as pending approval), thenapprove_post_group, which schedules it to the best slot or to scheduledForUtc.To revise a draft, use
update_postorupdate_post_group;rewrite_postsuggests AI variations and spends credits. Confirm the copy and time with the user before approving, andreject_post_grouponly when the user asks.Each post must fit its platform's limit (X 280 as X counts them, links 23 and emoji 2; LinkedIn 3000; Instagram and TikTok 2200; Bluesky 300; Threads 500).
For X copy that runs longer,
create_x_threaddrafts a thread, splitting long text for you; its follow-ups publish as replies to the first post, and approving it approves the whole thread.An X post can set replySettings to everyone (anyone; the default), following (accounts you follow), mentionedUsers or verified; one stored value is sent on every tweet in a thread when it is scheduled or posted now.
create_branded_imageandcreate_carouselrender on-brand images and carousels (PNG, SVG, PDF) from copy you write, in about a second;list_visual_optionsshows formats and templates, and an aiBackground adds an AI-generated image that costs money.To post a visual, pass its postMedia as media to
create_draft_postorupdate_post; it goes out with the post when it publishes.
create_app_screenshotframes a screenshot of the user's app or site in a Mac-style browser window on the brand background, with a headline, for posts that show the product.Instagram posts need at least one image (square or 4:5 portrait works best) or a video, which posts as a Reel; Facebook Page posts can be text, images or a video (a vertical video of 3 to 90 seconds posts as a Reel). Bluesky posts are up to 300 characters with up to 4 JPEG or PNG images and no video; links, hashtags and @handles become clickable.
To post a video:
import_media_from_urlfor a public link (up to 300 MB), orcreate_media_upload, PUT the file to its uploadUrl andcomplete_media_upload; either returns an asset to pass as media.TikTok takes a video or 1-35 JPEG, WebP or PNG photos; drafts land in the TikTok inbox so the creator finishes them in the TikTok app.
Direct Post to the TikTok profile is only available from the composer in the app (privacy, commercial-content disclosure and Music Usage Confirmation) — do not set postMode to direct from here.
Video goes out on X, LinkedIn (MP4 only), Facebook, Instagram, TikTok and YouTube; X, LinkedIn, Instagram, TikTok and YouTube finish it within a few minutes of publishing, so the post shows awaiting_platform until then.
A YouTube post is a video upload (copy is the description, youtube.title the title); a vertical or square video up to 3 minutes posts as a Short.
For post ideas:
get_trending_topicsreads the latest trends report for free,find_trending_topicsresearches live news in the user's niche (spends credits) and returns hot takes with draft posts, andlist_viral_post_formatsgives proven X and LinkedIn formats with templates to write from, andget_platform_algorithm_hintssays what each platform's feed rewards and punishes right now.For the brand kit:
find_brand_kit_on_websitesuggests one, confirm it with the user, save it withupdate_brand_kit, thencreate_branded_imageto preview it.To publish straight away instead of scheduling:
approve_post_groupwith autoSchedule: false, thenpost_nowfor each post; only do this when the user asks for it now.post_nowrefuses a post that isn't approved.For engagement on X:
refresh_reply_inboxpulls new replies, mentions and community posts and drafts replies (spends credits),list_reply_inboxshows them, andupdate_reply_draftordraft_replyrevise a draft.send_replyposts a reply to a mention only after the user approves its exact text; community posts are replied to by the user on X through replyOnXUrl.To read a post on X from its link (x.com pages can't be fetched directly):
get_x_post, with includeMedia for its photos and videos, orget_x_threadfor the whole thread and its replies; both spend half a credit per post X returns.To launch a product:
create_launch_kitwrites the Product Hunt listing and Show HN post to paste, drafts launch posts into Review and returns a day-by-day plan (spends credits); approve each post with its step's scheduledForUtc so it goes out on plan, and tick steps off withupdate_launch_step.For the user's own X posts after they're published:
get_x_automation_rulesandupdate_x_automation_rulesset standing rules that natively repost the ones that did well and remove the ones nobody saw,run_x_automationshows what those rules would do to the posts they have right now, andlist_x_automation_runsshows what they decided before. A rule starts switched off and in dry run, andrun_x_automationis always a preview — it changes nothing on X. Deleting a post on X can't be undone, so show the user what a run would pick and leave dryRun true until they are happy with the thresholds; taking a rule live is theirs to do in the app. Nothing here deletes anything itself, and none of it can change autonomy settings.To delete one X post the user names, by its link or its postId:
delete_x_post. A live post is deleted on X for good, so confirm the exact post with the user first; a post that hasn't gone out yet is just taken off the schedule.