Developer docs
Build with MCP
Add one URL to your assistant, sign in with Google, and it can run your marketing — products, strategy, calendar, contents, approvals, reports, resources, automations — and generate media, all through Model Context Protocol tools.
- Claude Code
- Claude
- Cursor
- ChatGPT
- OAuth
- 1
Run this in your terminal
claude mcp add --transport http poremu https://api.poremu.ai/mcp - 2
When Claude Code opens the browser, sign in with Google and press Allow.
- 3
Done. Try “use poremu to make a 9:16 image of…”. Type /mcp inside Claude Code to check the connection.
Docs server (no sign-in)
Lets the assistant read this developer guide so it can write the integration for you.
claude mcp add --transport http poremu-docs https://api.poremu.ai/mcp/docsNo key to paste
Your client discovers Poremu’s OAuth 2.1 server, opens a Google sign-in, and gets a short-lived token that refreshes itself. Everything runs as you — your credits, your plan, your adult-verification status. Disconnect anytime under Connected apps.
The whole Poremu API is exposed as Model Context Protocol tools over Streamable HTTP. Connect once, then say "use poremu to…".
| Server | URL | Auth | What it does |
|---|---|---|---|
| poremu | https://api.poremu.ai/mcp | Sign in with Google (OAuth) or API key | Marketing (products → strategy → calendar → contents → approvals → reports), resources, automations, image & video generation, LLM chat, library, apps |
| poremu-docs | https://api.poremu.ai/mcp/docs | none | Search and read this developer guide — so your assistant can write integrations against the REST API |
Connect
Claude Code — one command, then sign in with Google when the browser opens:
claude mcp add --transport http poremu https://api.poremu.ai/mcpAdd --scope user to make it available in every project. Ask anything that needs Poremu — or type /mcp, pick poremu, choose Authenticate, sign in and press Allow. To disconnect: claude mcp remove poremu or Settings → Developer → Connected apps.
Claude.ai / Claude Desktop — Settings → Connectors → Add custom connector → URL https://api.poremu.ai/mcp → Connect, finish the Google login.
Cursor (.cursor/mcp.json) — Cursor shows a Needs login button after you save:
{
"mcpServers": {
"poremu": { "url": "https://api.poremu.ai/mcp" },
"poremu-docs": { "url": "https://api.poremu.ai/mcp/docs" }
}
}ChatGPT — Settings → Connectors → Advanced → Developer mode → Create connector → MCP server URL https://api.poremu.ai/mcp → authentication OAuth → Create, then sign in.
Servers · CI · headless — any client that cannot open a browser sends an API key from Settings → Developer → API keys:
claude mcp add --transport http poremu https://api.poremu.ai/mcp --header "Authorization: Bearer pk_live_…"{ "mcpServers": { "poremu": { "type": "http", "url": "https://api.poremu.ai/mcp", "headers": { "Authorization": "Bearer pk_live_…" } } } }Both ways act as you: tools use your workspaces, credits, plan limits and adult-verification status. Under the hood OAuth is standard 2.1 with PKCE and dynamic registration — see Authentication.
First session
use poremu: list my products
→ use the one called Lumo
→ compare the last 7 days with the week before and tell me the bottleneck
→ fill the next two weeks of the calendar from the recommended template
→ write three Instagram post variants for the launch and save them as drafts
→ if CPA is above ₩9,000 on Meta, request a 20% budget cut (I'll approve it in the inbox)
→ build a report for last week and give me the share linkEvery marketing tool takes an optional workspaceId (default: your personal / only workspace) and productId (default: the product set with use_product, else the most recent one). Call marketing_help for the suggested order.
Tools
Reads are free. Writes cost the platform credits shown; media is charged at the model's price. External actions — budgets, publishing, sending, campaign creation — are never executed by a tool: they become approval requests in the workspace inbox.
Products & strategy
| Tool | What it does | Credits |
|---|---|---|
marketing_help | The recommended order and billing summary | free |
list_products · get_product · use_product | Products of the workspace; full detail (brand kit, audiences, latest strategy per section, funnel, channels); set the default product for this session | free |
list_strategy_templates · recommend_templates | 100 strategy templates (product kind × goal × category, no fixed duration); recommendations scored on kind, goals, budget, channels, lifecycle and recent metrics | free |
analysis_brief | Everything needed to analyse a product: site, store listings and GitHub as text, brand kit, existing strategy, recommended template scaffold, writing instructions and the JSON schema save_strategy accepts | 1 |
save_strategy | Store the seven sections you wrote (positioning, messaging, audience, channel_mix, kpi, budget, plan) as new strategy-doc versions, replace AI audiences, fill empty brand tone / forbidden words | 1 |
update_strategy_section · add_note | New version of one section (markdown or structured data); a product note | 1 · free |
analyze_product | In MCP mode returns the same brief as analysis_brief (the server-side analyser runs only in CREDITS / own-key mode) | 1 |
Metrics
| Tool | What it does |
|---|---|
get_metrics | Period totals per channel scope — spend, impressions, clicks, conversions, installs, revenue… with ctr / cpc / cpa / cpi / roas recomputed; groupBy day / channel / scope |
compare_periods | Last N days vs the N before, with deltas |
get_funnel | Funnel stage values, conversion rates and the bottleneck |
top_creatives | Creatives / campaigns / ad sets ranked by a metric |
record_metrics | Upsert daily metrics for a manual channel |
Calendar, contents & media
| Tool | What it does | Credits |
|---|---|---|
list_events · create_event · move_event | Read, add and move calendar events (campaigns, publishes, tasks, milestones) | free |
fill_calendar | Draft events from the product's strategy template (one week per stage, routines as rrule), starting next Monday by default | free |
generate_copy | Copy variants for a channel spec (meta_feed_1x1, instagram_post, google_rsa, hook_set, newsletter, naver_blog, …) that follow the brand kit; saved as DRAFT contents | LLM tokens + 1 |
generate_image · generate_video | Image / video attached to a DRAFT content item | model price |
list_contents · update_content_status | Content list; move between IDEA · DRAFT · REVIEW · APPROVED · SCHEDULED · REJECTED (publishing goes through approvals) | free |
create_content | Register content you already have (copy, articles, images, videos) without generating: title, spec, body, assetIds, channelId, campaignId, scheduledAt (→ SCHEDULED + calendar slot). Author shows as AI | free |
get_content | One item in full: body, media URLs, the spec's fields and limits (fields), over-limit fields (limitIssues), policy warnings, webUrl of the web editor | free |
update_content | Edit anything: body (replace) or bodyPatch (merge, null removes a key), assetIds (replace + order) or addAssetIds / removeAssetIds, spec, channel, campaign, status, scheduledAt (null unschedules). Pass expectedUpdatedAt from get_content to get CONFLICT instead of overwriting someone's edit | free |
import_media · upload_media | Media for contents: import_media(url) copies a public image / video (≤ 50 MB, optionally straight onto contentId); upload_media returns a presigned PUT for a local file (images ≤ 20 MB, videos ≤ 500 MB) | free |
Resources (자산)
| Tool | What it does |
|---|---|
list_resources | Knowledge, links, accounts, integrations and data sources plugged into a product (or the whole workspace) |
get_resource | One resource with its full text (≤ 12,000 chars). Secrets are never returned |
add_resource | Register a text or link as knowledge and plug it into the product. Do not send keys or passwords — the user registers those in the app |
See Resources for the REST side.
Automations
| Tool | What it does |
|---|---|
automation_catalog | Node types with config and outputs, condition operators, cron presets, limits, templates — read it before building |
create_automation | Create from a node graph (trigger → data → condition → action → email) or a templateId (weekly-report-email, spend-spike-alert, daily-ai-checkup) |
update_automation · delete_automation | Change the graph or settings, turn it on (enabled: true requires zero issues), delete |
run_automation | Run now (manual runs use your credits) |
list_automations · get_automation · list_automation_runs · get_automation_run | Inventory, detail, run history with per-node steps |
Example: "Create an automation that every weekday at 09:00 pulls yesterday's metrics, and if spend rose more than 30% emails me the numbers." See Automations.
Approvals & reports
| Tool | What it does | Credits |
|---|---|---|
request_approval | Ask for an external change (BUDGET_CHANGE, PAUSE_RESUME, PUBLISH_POST, SEND_EMAIL, …) with evidence; an admin decides in the inbox, then it executes | free |
create_proposal | A suggestion for review (strategy, budget, creative, schedule) with optional suggested actions | free |
list_pending_approvals | What is waiting | free |
build_report | Period report (numbers, channels, trend, your summary) with a share link | 5 |
Connected channels
When a workspace has connected ad accounts, their tools appear too: meta_list_campaigns, meta_get_insights, google_ads_list_campaigns, google_ads_get_report, ga4_run_report, sheet_read, naver_ads_list_campaigns, naver_ads_get_report (reads) and meta_update_budget, meta_pause, google_ads_update_budget, google_ads_pause, naver_ads_update_budget, naver_ads_pause (approval requests).
Media, chat & apps
| Tool | What it does | Credits |
|---|---|---|
list_models · estimate_cost · prompt_improve | Models with parameters and prices; quote before running; sharpen a prompt | free · free · ~1–2 |
generate_image · generate_video · get_generation · wait_for_generation · list_generations · delete_generation | Generate and track media (outputs are CDN URLs) | model price |
list_library · search_library · get_asset · favorite_asset · unfavorite_asset | Your library | free |
publish_generation · unpublish_generation · explore_feed | Explore community feed | free |
chat · list_chat_sessions · get_chat_session | LLM chat with sessions (default gpt-5.4-mini) | per token |
list_apps · get_app · run_app · get_app_run · wait_for_app_run | Multi-step apps (chat → image → video) | step prices |
get_balance | Credits and plan | free |
Product analysis over MCP
Over MCP the thinking happens in your client, so analysis is a two-step loop instead of one server call:
list_products→use_product(productId)analysis_brief(urls?, notes?)— sources as text (≤ 20k chars each, up to 6), brand kit, existing strategy, recommended template scaffold, instructions and theoutputSchema- Write the seven sections per the instructions — channel
kindvalues from the catalog only, numbers only when a source backs them save_strategy(sections, audiences?, brandKit?, facts?, summary?)— sections last written by a person are skipped unlessoverwriteHuman: true
"Read my product with analysis_brief, write the seven strategy sections and store them with save_strategy."
Docs server
https://api.poremu.ai/mcp/docs needs no authentication and exposes this guide as tools — list_docs, search_docs(query), get_doc(slug) — and as poremu://docs/<slug> resources. Add it next to poremu and ask "read the Poremu docs and write a Python client that creates a product, fills the calendar and listens for approval webhooks".
claude mcp add --transport http poremu-docs https://api.poremu.ai/mcp/docsBilling
An MCP connection runs the workspace in "my subscription" mode: your client does the reasoning, Poremu charges a small platform fee per marketing tool call — reads free, analysis / strategy / content writes 1, reports 5 — plus model prices for images and videos. API calls are free up to 1,000 per day, then 1 credit per 100. The web agent (POST /) and the server-side analyser also bill LLM tokens; see Credits & pricing.
Troubleshooting
- 401 with
WWW-Authenticate: Bearer resource_metadata=…— the client sent no credentials; it should start the OAuth flow. Older clients that cannot: use an API key. VALIDATION_ERROR: productId가 필요해요— calllist_productsthenuse_product, or passproductId.PENDINGfrom a write tool — that tool is an external action; it created an approval. Point the user to the inbox.ADULT_VERIFICATION_REQUIRED/NSFW_DISABLED— the account has not enabled unfiltered models; fix it in Settings on the web.- Disconnecting — Settings → Developer → Connected apps → Disconnect, or
DELETE /. Revoking an API key disconnects clients using that key.v1/ me/ connections/ {id}