aivy.
Developers & AI assistants

Connect your AI assistant to Aivy

Aivy is an AI marketing agent for small businesses. Through its MCP server, ChatGPT, Claude, Grok, Cursor or your own agent can read a brand, set up Brand DNA, strategy and a 12-month content plan, draft posts, attach media, and schedule or publish to the brand's social channels — only with the permissions the person grants.

MCP endpoint https://aivymarketing.com/api/mcp

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)

  1. Settings → Connectors → Add custom connector.
  2. Name Aivy, URL https://aivymarketing.com/api/mcp.
  3. 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

  1. Settings → Apps & Connectors → Advanced settings: turn on Developer mode.
  2. Create, name Aivy, paste the URL, choose OAuth.
  3. Approve, then enable Aivy from the tools menu in a chat.

Grok (grok.com)

  1. Open grok.com/connectors → New Connector → Custom.
  2. Paste https://aivymarketing.com/api/mcp and sign in to Aivy.

Cursor, bots and other MCP clients

Clients with MCP OAuth only need the URL. Clients that need a fixed key:

  1. In Aivy, open Settings → AI Assistants → Create a key (shown once).
  2. 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 401 carries WWW-Authenticate: Bearer realm="aivy", resource_metadata="…".
  • Dynamic client registration at /api/mcp/oauth/register, or a Client ID Metadata Document (an https URL as client_id).
  • Authorization code with PKCE S256 (required). The resource parameter is https://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_token with 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

ProfileOAuth scopeWhat it allows
Readeraivy.readerBrands, Brand DNA, strategy, content plan, channels, posts, media, credit usage, analytics.
Drafteraivy.drafterReader plus brand setup, strategy and plan edits, drafts, media uploads, and AI generation within a credit limit. Cannot publish or schedule.
Publisheraivy.publisherDrafter 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

URLWhat it is
https://aivymarketing.com/api/mcpMCP server (JSON-RPC over HTTP POST)
/.well-known/oauth-protected-resource/api/mcpProtected resource metadata (RFC 9728)
/.well-known/oauth-authorization-serverAuthorization server metadata (RFC 8414)
/api/agent/openapi.jsonTool reference with input schemas (OpenAPI 3.1)
/llms.txt · /llms-full.txtSummary for language models · all agent docs in one file
/docs/ai-assistants.md · /docs/agent-mcp.mdSetup 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.

  1. create_brand (name, optional website).
  2. start_website_scan → poll get_website_scan — or create_brand_dna_without_website and fill it with update_brand_dna.
  3. get_brand_dna, adjust with update_brand_dna, then approve_brand_dna.
  4. get_strategy_questions and save_strategy_answers, one chapter at a time.
  5. generate_strategy → get_strategy_draft, edit_strategy, approve_strategy.
  6. 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

  1. get_brand_context for voice and guidelines, list_channels to check the network can publish.
  2. upload_media (returns a signed upload URL) or upload_media_from_url.
  3. create_post_draft with 1–5 variants and mediaIds. Fix any validation errors.
  4. schedule_post (at least 5 minutes ahead) or publish_post, then poll get_publish_status.
  5. Later, get_post_metrics for 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

ToolProfileWhat it does
get_accountReaderRead the signed-in account and the active Aivy grant. Does not include secrets.
list_brandsReaderList brands this grant may read.
get_usageReaderRead credit balance and billing mode. This does not spend credits.

Brand setup

ToolProfileWhat it does
get_setup_statusReaderRead 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_brandDrafterCreate a brand in the Aivy account with a name and an optional website. Returns the brand id. Spends no credits.
start_website_scanDrafterStart 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_scanReaderRead the status of a website scan (queued, running stages, awaiting_review, failed) and, once finished, the proposed Brand DNA.
get_brand_dnaReaderRead 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_dnaDrafterChange Brand DNA fields. Only the fields sent change. Does not approve it.
approve_brand_dnaDrafterMark the current Brand DNA as approved. The strategy and content plan are built from the approved version.
create_brand_dna_without_websiteDrafterCreate 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_contextReaderRead brand voice, identity, do and dont words, language, timezone, and visual guidelines.

Strategy

ToolProfileWhat it does
get_strategy_questionsReaderRead 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_answersDrafterSave 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_strategyDrafterBuild 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_draftReaderRead 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_strategyDrafterChange one field of the latest strategy, e.g. keyMessage or primaryGoal (editableFields in get_strategy_draft). An edited strategy needs approval again.
approve_strategyDrafterApprove the latest strategy. The 12-month content plan can only be built from an approved strategy.
get_strategyReaderRead 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

ToolProfileWhat it does
create_content_planDrafterBuild 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_planReaderRead 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_weekDrafterChange 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_weekReaderRead one content-plan week for a granted brand.
get_content_itemReaderRead 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

ToolProfileWhat it does
list_channelsReaderList channel health, account name, handle, page or profile type, token expiry, and whether the channel can publish. Tokens are not returned.
get_channel_connect_urlDrafterReturn a link a person opens to connect or reconnect a channel, including Instagram. Tokens are not returned.

Posts

ToolProfileWhat it does
list_calendarReaderList posts in an explicit interval. A timestamp without an offset uses the brand timezone.
list_postsReaderList posts for one brand with optional status, platform, and cursor.
create_post_draftDrafterSave 1 to 5 unpublished posts. Validates platform limits before saving. Does not publish. scheduledAt is stored only.
update_post_draftDrafterUpdate text, hashtags, placement, format, media, or scheduledAt on an unpublished post.
duplicate_postDrafterCopy an unpublished or published post onto another platform as a new ready draft after validation.
delete_postDrafterDelete 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_postDrafterArchive an unpublished, unscheduled post. The scheduler ignores archived posts.

Publishing

ToolProfileWhat it does
schedule_postPublisherSchedule 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_postPublisherCancel a scheduled provider post. If the provider cancel fails, the local post stays scheduled.
publish_postPublisherPublish a post now. Requires posts.publish and allowPublish. With requireApproval, the post waits for a person in Aivy.
get_publish_statusReaderRead 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

ToolProfileWhat it does
upload_mediaDrafterCreate a media id and a signed upload URL for an image or video. The secret is not a provider token.
upload_media_from_urlDrafterImport a public https image or video into the brand library.
list_mediaReaderList media for a granted brand.
get_mediaReaderRead one media file, including alt text and dimensions.
delete_mediaDrafterDelete media that is not used by a scheduled or published post.

AI generation

ToolProfileWhat it does
estimate_generationReaderEstimate generation cost in dc. This does not spend credits.
generate_post_variantsDrafterGenerate post text inside the grant generation ceiling.
generate_imageDrafterGenerate an image inside the grant generation ceiling and store it as media. Not offered to Claude clients.

Analytics

ToolProfileWhat it does
get_post_metricsReaderRead 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_metricsReaderRead 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) returns 405. 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 include invalid_input, permission_denied, conflict, channel_disconnected, already_processing, rate_limited, provider_error and temporarily_unavailable.
  • Credits: generation and setup steps spend the person's Aivy credits, capped by the grant's credit limit. get_usage and estimate_generation are 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/v1 is 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.