Conector MCP

Um servidor MCP (JSON-RPC 2.0 sobre HTTP) que dá ao seu agente acesso à fila de drafts, às ideias, à sua voz e ao treinamento.

Conectar

Endpoint: https://www.foundergrowth.app/api/mcp. Limite de 60 chamadas por minuto.

No claude.ai: Configurações → Conectores → adicionar conector personalizado, cole a URL e clique em Conectar. O claude.ai abre o FounderGrowth para você entrar e permitir o acesso (OAuth); não precisa de token.

Claude Code, scripts e outros clientes também podem usar Authorization: Bearer fg_…, com um token criado em Configurações → Integrações.

Instruções que o servidor envia ao agente

You are the founder's content agent. Work in this order:
1) get_status to see what is waiting.
2) get_voice_profile before writing anything, and follow it. If the voice is not trained yet, build it with the founder first (save_voice_profile).
3) list_pending_drafts: rewrite drafts that have founder_direction with update_draft. The founder's most recent note wins over older notes and over the voice profile.
4) list_ideas (and list_unread_articles) for new material; write one save_draft per platform, always with a rationale explaining the angle you took.
5) If ideas_needed > 0, propose_idea with a rationale.
6) If you noticed a repeated preference in the founder's notes or rewrites, propose_learning.
7) Now and then, get_performance: compare the best and worst posts and propose_learning with performance_item_ids when a pattern repeats.
Radar: get_radar for the dated signals of the last 14 days; when several point to the same audience pain or shift, propose_opportunity citing them.
Never approve, schedule or publish: the founder does that in the Review queue.
Live docs: https://www.foundergrowth.app/docs/mcp — if anything here conflicts with them, the docs win.

Ferramentas

get_status

What is waiting right now: drafts by status, drafts the founder asked you to rewrite, how many new ideas exist and how many more are wanted, unread articles and which social connections are active. Call this first.

get_voice_profile

Get the founder's compiled Voice DNA — personality prompt, deep voice signals, banned words, topics, hook style. ALWAYS call this BEFORE writing a post so you can match their voice.

list_pending_drafts

Drafts waiting for work. Drafts with needs_rewrite=true carry founder_direction: notes the founder left after your last note. Rewrite those first with update_draft. Campaign drafts (editable_by_agent=false) only accept add_note.

  • limit integer

list_ideas

Open ideas in the founder's inbox (their own notes, your proposals, RSS and trends). Pass idea_id to save_draft when you write from one.

  • limit integer

list_unread_articles

List articles fetched from the founder's RSS feeds that haven't been used in a post yet. Use this to find inspiration material.

  • limit integer

save_draft

Persist a new post as a draft in the founder's Review queue. Call once per platform. Always include a rationale (1-3 sentences on why this angle); it shows up as your note on the draft.

  • platform linkedin | x | instagram · obrigatório — Target platform
  • text string · obrigatório — The post body. For X threads, separate tweets with two newlines. For Instagram, just the caption (slides go in the slides field).
  • hashtags array — Optional hashtags (1-3, no # prefix needed)
  • slides array — For Instagram carousel: 5-7 slides
  • rationale string — Why you took this angle. Shown to the founder.
  • idea_id string — The idea this draft comes from, from list_ideas.
  • source_url string — Optional URL of the article that inspired the post
  • client_ref string — Optional idempotency key. Retrying save_draft with the same client_ref returns the first draft instead of creating a duplicate.
  • scheduled_for string — Optional suggested publish time, ISO 8601 with timezone, in the future. When omitted and the founder's posting queue is on, the next free slot is suggested. The post stays a draft; it is only scheduled when the founder approves it in the Review queue.

update_draft

Rewrite an existing draft (status draft or rejected; a rejected draft goes back to review). Only the fields you send change. rationale is required and becomes your note on the draft.

  • item_id string · obrigatório
  • text string — The post body. For X threads, separate tweets with two newlines. For Instagram, just the caption (slides go in the slides field).
  • hashtags array — Optional hashtags (1-3, no # prefix needed)
  • slides array — For Instagram carousel: 5-7 slides
  • rationale string · obrigatório — What you changed and why, answering the founder's note.

add_note

Leave a note on a draft without changing it (a question, or why you are not changing it).

  • item_id string · obrigatório
  • body string · obrigatório

get_training

The founder's training notes: general voice notes, current interests, content modes and per-platform notes (linkedin, x, instagram). Read before writing.

update_training

Change training notes. Send only the keys you change; an empty string clears a field; missing keys are left alone. Be additive: fold new guidance into the existing text instead of rewriting it. Every change is logged with you as the author.

  • general string
  • current_interests string
  • content_modes string
  • platforms object

save_voice_profile

Save the founder's Voice DNA after you analyzed their real posts with the spec that get_voice_profile returns when the voice is not trained. Refuses to overwrite an existing Voice DNA unless replace_existing is true, which needs the founder's explicit OK.

  • analysis object · obrigatório — One JSON object with the keys of the Voice DNA spec.
  • sample_posts array · obrigatório — The founder's own posts you analyzed, verbatim (3-12, 80+ characters each).
  • industry_sector string — The founder's industry, in their words.
  • replace_existing boolean

propose_learning

Propose a voice rule you noticed during the session (e.g. the founder keeps cutting your openings). It waits for the founder's approval; once approved it is appended to the training of that scope.

  • title string · obrigatório — Short name, up to 200 characters.
  • body string · obrigatório — The rule as an instruction to the writer, up to 1000 characters.
  • scope general | linkedin | x | instagram
  • performance_item_ids array — When the rule comes from get_performance: the ids of the posts that show it (up to 10).

get_performance

The founder's published posts of the last 90 days with the best and the worst engagement (X metrics and metrics the founder typed in), with text and numbers. Compare them and, when a pattern of form repeats, propose_learning with performance_item_ids. Needs at least 6 measured posts; the note says what to do.

get_radar

Audience Radar: dated signals of the last 14 days (articles from the founder's RSS feeds, Google/X trends), deduplicated, with links. Use them to spot audience pains, questions and shifts, then propose_opportunity.

propose_opportunity

Propose an Audience Radar opportunity backed by real, dated signals from get_radar. It shows up for the founder with its evidence; if they pick it, it becomes an idea in their inbox. Never invent news: every opportunity must cite at least one signal id.

  • title string · obrigatório — The opportunity in one line, 3-160 characters.
  • summary string · obrigatório — What the audience is feeling or asking, and why now (20-1000 characters).
  • scores object — Your estimates from 0 to 1.
  • signal_ids array · obrigatório — 1-8 signal ids from get_radar; the first is the main one.

propose_idea

Drop a new idea into the founder's inbox. Use when get_status says ideas_needed > 0. Include a rationale: what inspired it and why it fits now.

  • title string · obrigatório — One sentence: what the founder would say.
  • body string
  • url string
  • angle string — A suggested stance or take.
  • rationale string

Exemplo

curl -s https://www.foundergrowth.app/api/mcp \
  -H "Authorization: Bearer $FOUNDERGROWTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_status","arguments":{}}}'