Connect in one minute
Add https://aivymarketing.com/api/mcp as a remote MCP server (Streamable HTTP). An Aivy window opens where the person signs in or creates a free account, picks the brands, and chooses what the assistant may do.
Claude (claude.ai, desktop, Cowork)
- Settings → Connectors → Add custom connector.
- Name Aivy, URL
https://aivymarketing.com/api/mcp. - Connect and approve in the Aivy window.
Claude Code
claude mcp add --transport http aivy https://aivymarketing.com/api/mcp
Then run /mcp, choose aivy and sign in.
ChatGPT
- Settings → Apps & Connectors → Advanced settings: turn on Developer mode.
- Create, name Aivy, paste the URL, choose OAuth.
- Approve, then enable Aivy from the tools menu in a chat.
Grok (grok.com)
- Open grok.com/connectors → New Connector → Custom.
- Paste
https://aivymarketing.com/api/mcpand sign in to Aivy.
Cursor, bots and other MCP clients
Clients with MCP OAuth only need the URL. Clients that need a fixed key:
- In Aivy, open Settings → AI Assistants → Create a key (shown once).
- Send
Authorization: Bearer aivy_at_…with every request.
{
"mcpServers": {
"aivy": {
"url": "https://aivymarketing.com/api/mcp",
"headers": { "Authorization": "Bearer aivy_at_YOUR_KEY" }
}
}
}
A chatbot cannot connect by visiting this website. A person adds the MCP URL as a connector in their assistant (or gives their bot a key), and the assistant then calls Aivy's tools.
Authentication
OAuth 2.1 (recommended)
- Aivy is the authorization server. Discovery follows the MCP spec: a
401carriesWWW-Authenticate: Bearer realm="aivy", resource_metadata="…". - Dynamic client registration at
/api/mcp/oauth/register, or a Client ID Metadata Document (an https URL asclient_id). - Authorization code with PKCE S256 (required). The
resourceparameter ishttps://aivymarketing.com/api/mcp. Public clients (token_endpoint_auth_method: none). - The person approves at aivymarketing.com/connect/agent. Tokens come from
/api/mcp/oauth/token(authorization_code,refresh_tokenwith rotation). - The access token is an opaque
aivy_at_…grant, not a JWT.
Fixed key
A person creates a key under Settings → AI Assistants. It starts with aivy_at_, is shown once, works for 90 days, and can be replaced or disconnected at any time.
Profiles and scopes
| Profile | OAuth scope | What it allows |
|---|---|---|
| Reader | aivy.reader | Brands, Brand DNA, strategy, content plan, channels, posts, media, credit usage, analytics. |
| Drafter | aivy.drafter | Reader plus brand setup, strategy and plan edits, drafts, media uploads, and AI generation within a credit limit. Cannot publish or schedule. |
| Publisher | aivy.publisher | Drafter plus schedule_post, unschedule_post and publish_post. With requireApproval on, these return pendingApproval until a person approves the post in Aivy. |
Scopes are ceilings: the person can choose a lower profile, specific brands or all brands (including future ones), and a credit limit. tools/list only returns the tools the grant allows.
Discovery endpoints
| URL | What it is |
|---|---|
https://aivymarketing.com/api/mcp | MCP server (JSON-RPC over HTTP POST) |
/.well-known/oauth-protected-resource/api/mcp | Protected resource metadata (RFC 9728) |
/.well-known/oauth-authorization-server | Authorization server metadata (RFC 8414) |
/api/agent/openapi.json | Tool reference with input schemas (OpenAPI 3.1) |
/llms.txt · /llms-full.txt | Summary for language models · all agent docs in one file |
/docs/ai-assistants.md · /docs/agent-mcp.md | Setup guide for people · walkthrough (Markdown) |
Quick start: set up a brand
Call get_setup_status and follow its nextStep. The MCP prompt set_up_my_brand starts this flow.
create_brand(name, optional website).start_website_scan→ pollget_website_scan— orcreate_brand_dna_without_websiteand fill it withupdate_brand_dna.get_brand_dna, adjust withupdate_brand_dna, thenapprove_brand_dna.get_strategy_questionsandsave_strategy_answers, one chapter at a time.generate_strategy→get_strategy_draft,edit_strategy,approve_strategy.create_content_plan→get_content_plan.
Scans, strategies and plans build in the background for a few minutes; read them again after checkAgainInSeconds instead of starting them again. They cost 9, 5 and 14 credits from the person's Aivy account (about 28 for a full setup). Ask the person before steps that spend credits or approve something.
Quick start: draft and schedule a post
get_brand_contextfor voice and guidelines,list_channelsto check the network can publish.upload_media(returns a signed upload URL) orupload_media_from_url.create_post_draftwith 1–5 variants andmediaIds. Fix any validation errors.schedule_post(at least 5 minutes ahead) orpublish_post, then pollget_publish_status.- Later,
get_post_metricsfor impressions, reach, engagement and clicks.
{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "schedule_post",
"arguments": {
"brandId": "BRAND_ID",
"postId": "POST_ID",
"scheduledAt": "2026-12-01T09:00:00",
"idempotencyKey": "linkedin-2026-12-01"
}
}
}
A timestamp without an offset uses the brand's time zone. dryRun: true returns the payload without sending it.
Tool reference
The minimum profile is shown for each tool. Full input schemas: openapi.json, or tools/list on the MCP server.
47 tools.
Account and usage
| Tool | Profile | What it does |
|---|---|---|
get_account | Reader | Read the signed-in account and the active Aivy grant. Does not include secrets. |
list_brands | Reader | List brands this grant may read. |
get_usage | Reader | Read credit balance and billing mode. This does not spend credits. |
Brand setup
| Tool | Profile | What it does |
|---|---|---|
get_setup_status | Reader | Read how far a brand is through Aivy setup (Brand DNA, strategy, 12-month content plan), which step comes next as nextStep, running background jobs, and a link to the matching Aivy page. Without brandId it lists the brands, or returns step create_brand when there are none. |
create_brand | Drafter | Create a brand in the Aivy account with a name and an optional website. Returns the brand id. Spends no credits. |
start_website_scan | Drafter | Start reading the brand website to propose its Brand DNA (logo, colors, fonts, tone, audience). Costs 9 credits from the Aivy account, counted against this connection's credit limit. Runs in the background for a few minutes; get_website_scan reads progress. An already running scan is returned instead of starting a second one. |
get_website_scan | Reader | Read the status of a website scan (queued, running stages, awaiting_review, failed) and, once finished, the proposed Brand DNA. |
get_brand_dna | Reader | Read the current Brand DNA (name, industry, tagline, value proposition, audience, tone, personality, key messages, colors, fonts, language, country, time zone) and whether it is proposed or approved. |
update_brand_dna | Drafter | Change Brand DNA fields. Only the fields sent change. Does not approve it. |
approve_brand_dna | Drafter | Mark the current Brand DNA as approved. The strategy and content plan are built from the approved version. |
create_brand_dna_without_website | Drafter | Create an empty Brand DNA for a brand that has no website, to be filled with update_brand_dna. Returns the existing one when there already is one. Spends no credits. |
get_brand_context | Reader | Read brand voice, identity, do and dont words, language, timezone, and visual guidelines. |
Strategy
| Tool | Profile | What it does |
|---|---|---|
get_strategy_questions | Reader | Read the strategy questions in five chapters (business, customers, brand, growth, future) with their answer keys, kinds, allowed options, which are required, and the answers saved so far, including answers prefilled from the website scan. missingRequired lists the keys still needed. |
save_strategy_answers | Drafter | Save answers to strategy questions by answer key. Select answers must use the listed option text exactly; multi-select answers are lists. Starts the questionnaire if needed. Returns missingRequired. |
generate_strategy | Drafter | Build the marketing strategy from the saved answers and the approved Brand DNA. Costs 5 credits from the Aivy account, counted against this connection's credit limit. Runs in the background; get_strategy_draft reads the result. Requires every required question to be answered. |
get_strategy_draft | Reader | Read the latest marketing strategy (goals, audience, positioning, offer, messages, content pillars, channels and cadence), whether it is still being built, and whether it is approved. |
edit_strategy | Drafter | Change one field of the latest strategy, e.g. keyMessage or primaryGoal (editableFields in get_strategy_draft). An edited strategy needs approval again. |
approve_strategy | Drafter | Approve the latest strategy. The 12-month content plan can only be built from an approved strategy. |
get_strategy | Reader | Read strategy goals, audience, positioning, content pillars with ids, and the roadmap summary (id, status, startDate, endDate). Week items are on get_pipeline_week. roadmap is null when this brand has no roadmap. |
Content plan
| Tool | Profile | What it does |
|---|---|---|
create_content_plan | Drafter | Build the 12-month content plan from the approved strategy. Costs 14 credits from the Aivy account, counted against this connection's credit limit. Runs in the background; get_content_plan reads the result. |
get_content_plan | Reader | Read the 12-month content plan: start date, which months are ready, and the items of one month (week, type, platform, title). Also says whether it is still being built. |
edit_content_plan_week | Drafter | Change the plan of one week: title, weekTheme, weeklyStory, weeklyGoal, mainMessage or stage (awareness, consideration, decision or retention). A week whose master content is already written cannot be changed here. |
get_pipeline_week | Reader | Read one content-plan week for a granted brand. |
get_content_item | Reader | Read one post or roadmap item in a granted brand. A post includes body, hashtags, mediaIds, media, accountKind, scheduledAt, publishedAt, permalink, providerPostId, version, and updatedAt. |
Channels
| Tool | Profile | What it does |
|---|---|---|
list_channels | Reader | List channel health, account name, handle, page or profile type, token expiry, and whether the channel can publish. Tokens are not returned. |
get_channel_connect_url | Drafter | Return a link a person opens to connect or reconnect a channel, including Instagram. Tokens are not returned. |
Posts
| Tool | Profile | What it does |
|---|---|---|
list_calendar | Reader | List posts in an explicit interval. A timestamp without an offset uses the brand timezone. |
list_posts | Reader | List posts for one brand with optional status, platform, and cursor. |
create_post_draft | Drafter | Save 1 to 5 unpublished posts. Validates platform limits before saving. Does not publish. scheduledAt is stored only. |
update_post_draft | Drafter | Update text, hashtags, placement, format, media, or scheduledAt on an unpublished post. |
duplicate_post | Drafter | Copy an unpublished or published post onto another platform as a new ready draft after validation. |
delete_post | Drafter | Delete an unpublished, unscheduled post. A scheduled post must be unscheduled first. A published post deletes the PostForMe record when that call succeeds. networkRemoval is unconfirmed because this does not prove the native network post was removed. |
archive_post | Drafter | Archive an unpublished, unscheduled post. The scheduler ignores archived posts. |
Publishing
| Tool | Profile | What it does |
|---|---|---|
schedule_post | Publisher | Schedule a post at least 5 minutes ahead. Requires posts.publish and allowPublish. With requireApproval, the post waits for a person in Aivy. The stored time is the scheduled_at echoed by PostForMe. dryRun returns that provider payload and does not send it. |
unschedule_post | Publisher | Cancel a scheduled provider post. If the provider cancel fails, the local post stays scheduled. |
publish_post | Publisher | Publish a post now. Requires posts.publish and allowPublish. With requireApproval, the post waits for a person in Aivy. |
get_publish_status | Reader | Read scheduled, publishing, published, failed, or pendingApproval plus the provider id, permalink, and publishedAt. changedFields is empty unless this read synced a provider change. A published post has publishedAt and scheduledAt null. |
Media
| Tool | Profile | What it does |
|---|---|---|
upload_media | Drafter | Create a media id and a signed upload URL for an image or video. The secret is not a provider token. |
upload_media_from_url | Drafter | Import a public https image or video into the brand library. |
list_media | Reader | List media for a granted brand. |
get_media | Reader | Read one media file, including alt text and dimensions. |
delete_media | Drafter | Delete media that is not used by a scheduled or published post. |
AI generation
| Tool | Profile | What it does |
|---|---|---|
estimate_generation | Reader | Estimate generation cost in dc. This does not spend credits. |
generate_post_variants | Drafter | Generate post text inside the grant generation ceiling. |
generate_image | Drafter | Generate an image inside the grant generation ceiling and store it as media. Not offered to Claude clients. |
Analytics
| Tool | Profile | What it does |
|---|---|---|
get_post_metrics | Reader | Read impressions, reach, engagement, clicks, and permalink for one post from the provider feed. Missing numbers are null. availability is not_available_yet with a reason when the provider has no metrics. |
get_brand_metrics | Reader | Read impressions, reach, engagement, clicks, and followers delta for a brand interval. start and end are required ISO timestamps. A value without an offset uses the brand timezone. When no feed row contributes, availability is not_available_yet and the numbers are null. |
Protocol, limits and errors
- Transport: stateless Streamable HTTP. Send JSON-RPC 2.0 with
POST;GET(SSE) returns405. Methods:initialize,ping,tools/list,tools/call,prompts/list,prompts/get. - MCP versions:
2025-11-25,2025-06-18,2025-03-26. - Rate limits: 300 reads and 60 writes per minute per grant.
- Idempotency: every write takes an
idempotencyKey; repeating a call with the same key does not repeat the action. - Results:
{ "ok": true, "data": … }or{ "ok": false, "error": { "code", "message", "retryable" } }. Codes includeinvalid_input,permission_denied,conflict,channel_disconnected,already_processing,rate_limited,provider_errorandtemporarily_unavailable. - Credits: generation and setup steps spend the person's Aivy credits, capped by the grant's credit limit.
get_usageandestimate_generationare free. - REST: the same tools are available as
POST /api/agent/v2/actions/{name}with{ "brandId", "idempotencyKey", "input" }, plus read routes under/api/agent/v2/, using the same bearer token. The old/api/agent/v1is retired (410).
Privacy and safety
- An assistant sees only the brands and actions the person allowed. Settings → AI Assistants shows every connection, its activity and credits used, and Disconnect stops it at once.
- Nothing is published without the Publisher profile; with approval on, every post waits for a person in Aivy.
- Social account passwords and tokens are never returned to an assistant.
- The assistant's provider receives the Aivy data it reads in the chat. See the Privacy policy and Terms.
Questions or partnership requests: info@aivy.cz.