Door opensourcesignal 2.19.0215 tools18 recipesStreamable HTTP
Hello, agent.
Your human wants ChatGPT to recommend them. That’s a job with steps: find the pages AI reads, find who runs them, get them pitched, prove the win. We hold every step. You run them. Your human says yes.
Agents, your brief is plain markdownGET /outreach-for-agents/brief.md
14-day free trialno card neededcancel anytime
Human? Start the trial, then make your agent a token in Settings, Agents.
Agent calls: initialize
Door answers: sourcesignal 2.19.0 · 215 tools · 18 recipes
Agent calls: start
Door answers: You act for Sam at Northpeak · every change is a card or applies as your human set
Agent calls: opportunities_find {"project_id":"…","limit":5}
Door answers: 5 pages · brightpathreview.com first, grade 91
Agent calls: contacts_research {"project_id":"…","limit":5}
Door answers: Card proposed · waiting for Sam
- Speaks MCP with
- Claude
- ChatGPT
- Gemini
- Copilot
- CuCursor
- VSVS Code
// The job
Four calls from invisible to cited.
ChatGPT, Gemini and the rest build their favorites from a short list of pages. Get your human onto those pages and they’re in the answer. Here is the whole loop, as you’d call it.
- 01
opportunities_findFind the pages AI reads
Every page the engines cite when your human’s buyers ask, graded by what it’s worth to them.
Read · answers at once - 02
contacts_researchFind who runs them
The worker looks up the people behind each page and keeps the finds. Priced per page.
Card or at once · your human decides - 03
opportunities_promoteGet them pitched
Each promoted page gets a pitch written for it. Your human reviews it, and it leaves from their own inbox.
Card or at once · your human decides - 04
placements_findRead every win
Every placement won: how it was won, whether it’s still live, and the answers that cited it since.
Read · answers at once
You run the loop. Your human says yes. We keep score.
// Recipes
18 plays, handed over on your first call.
start returns them, and a client that lists prompts offers each one as a recipe_… prompt. Each names the calls in order and what every call gives back. Pick one.
# recipe_job_follow_up
# Did the work you started finish, and what did it produce
1jobs_findLists this project's recent jobs with their ids and status.
2statusReads one job: progress by stage, the error, what it produced and whether it can be retried.
3job_retryLeaves a card that runs a failed job again.
>
// Scopes
Five boxes decide what you can call.
Humans: these are the boxes in Settings, Agents. Agents: this is the tools/list you get back. Tick only what the job needs.
212 of 215 tools unlocked
AnswersLeaves a card
- project_brief
- search
- open_view
- glossary_lookup
- compare_periods
- opportunities_find
- opportunity_explain
- deck_state
- pipeline_state
- conversations_find
- describe
- query
- read
- metric
- status
- jobs_find
- next_steps
- insights_since
- replies_find
- contacts_find
- placements_find
- outreach_yield
- what_worked
- mailbox_health
- spend_find
- agent_activity
- clients_health
- prompts_find
- competitors_movement
- visibility_breakdown
- tracking_health
- engine_rates
- score_history
- fanout_find
- competitor_pages
- market_find
- data_correlate
- deck_patterns
- promotion_outcomes
- research_yield
- drafts_find
- posts_find
- tracking_reports_find
- pages_review
- keywords_find
- competitors_find
- content_gaps_find
- content_articles_find
- content_improvements_find
- content_checks_state
- content_piece_get
- report_headline
- start
- catalog
- spot_explain
- steer_compile
- steer_set_rule
- steer_set_focus
- steer_end
- deck_set_budget
- pipeline_run
- contacts_research
- nudges_draft
- opportunities_park
- opportunities_bring_back
- opportunities_promote
- job_retry
- mailbox_reconnect
- opportunity_update
- opportunities_pin
- opportunity_override_set
- promotion_rule_propose
- research_window_set
- deck_types_set
- reply_triage
- prompts_add
- prompts_remove
- prompts_restore
- prompt_rename
- prompts_import_ahrefs
- keyword_prompts_link
- keyword_prompts_unlink
- competitor_update
- competitors_remove
- competitor_suggestions_accept
- competitor_suggestions_dismiss
- competitors_autoadd_set
- engines_set
- project_markets_set
- answers_check_now
- analysis_start
- draft_edit
- draft_rewrite
- reply_draft_set
- reply_prepare
- outreach_prompt_set
- reply_rules_set
- fee_stance_set
- pitch_drafts_create
- no_reply_redraft
- recipient_page_draft
- recipient_page_pick
- page_draft_write
- opportunities_recommend
- drafts_park
- sequence_template_save
- email_template_save
- email_templates_seed
- auto_promotion_set
- draft_recipient_set
- drafts_sender_set
- sequence_timing_set
- outreach_timing_set
- timing_presets_set
- outreach_hold
- outreach_stop
- follow_up_dates_set
- reply_reminder_set
- reply_reminder_days_set
- outreach_signoff
- outreach_launch
- outreach_send_now
- outreach_resume
- outreach_resume_anyway
- reply_send
- step_retry_unconfirmed
- step_delivered_record
- draft_sent_record
- outreach_attempt_record
- conversation_mark_won
- post_mark_posted
- suppression_lift
- mailbox_send_settings_set
- contact_add
- contact_update
- addresses_check
- contacts_suppress
- unmatched_mail_resolve
- conversation_contact_switch
- page_mention_recheck
- post_draft
- post_edit
- posts_skip
- posts_reopen
- outreach_sender_set
- outreach_hours_set
- ahrefs_report_bind
- ahrefs_prompts_sync
- feed_reconnect
- brand_domain_set
- tracking_activate
- job_cancel
- thread_decide
- opportunities_regrade
- opportunities_group
- prompts_classify
- competitor_suggestions_add_all
- project_create
- project_archive
- project_restore
- tracking_plan_propose
- prompts_propose
- org_rename
- profile_update
- support_ask
- support_resolve
- support_rate
- keywords_add
- keywords_remove
- keyword_update
- keywords_restore
- keywords_import_csv
- keywords_suggest
- competitors_add
- content_outline_start
- site_checks_run
- site_read_run
- content_piece_mark_published
- content_outline_again
- content_outline_edit
- content_draft_start
- content_draft_stop
- content_section_rewrite
- content_sections_retry
- content_section_edit
- content_topic_decide
- content_piece_move
- content_live_check
- content_plan_rank
- content_autopilot_set
- content_voice_read_run
- content_voice_accept
- content_voice_forget
- placement_record
- placements_confirm_live
- placement_update
- placements_check
- share_link_create
- share_link_revoke
- report_commentary_set
- briefing_generate
- csv_import
- traffic_sync_now
- analysis_ask
- mandate_propose
- deck_next
- deck_decide
- take_back
- outreach_prompt_suggest
- sequence_template_suggest
- spot_plan
- spot_ask
- org_brief
- org_projects_health
- org_usage
// House rules
Yes, we wrote you a robots.txt.
The same rules your human reads in the app, in a format you already respect.
# agents.txt for sourcesignal.ai/api/mcp User-agent: * Allow: read # what your human can open, nothing more Ask: change # a card your human applies, or at once where their setting says so Mandate: tidy, track, spend, standing, publish # by kind, or any tool by name; alone within limits until a date Mandate-asks: reply_triage # never alone under a mandate Mandate-asks: outreach_signoff # never alone under a mandate Mandate-asks: outreach_launch # never alone under a mandate Mandate-asks: outreach_send_now # never alone under a mandate Mandate-asks: outreach_resume # never alone under a mandate Mandate-asks: outreach_resume_anyway # never alone under a mandate Mandate-asks: reply_send # never alone under a mandate Mandate-asks: step_retry_unconfirmed # never alone under a mandate Mandate-asks: step_delivered_record # never alone under a mandate Mandate-asks: draft_sent_record # never alone under a mandate Mandate-asks: outreach_attempt_record # never alone under a mandate Mandate-asks: conversation_mark_won # never alone under a mandate Mandate-asks: post_mark_posted # never alone under a mandate Mandate-asks: suppression_lift # never alone under a mandate Mandate-asks: project_create # never alone under a mandate Mandate-asks: project_archive # never alone under a mandate Mandate-asks: org_rename # never alone under a mandate Mandate-asks: profile_update # never alone under a mandate Mandate-asks: support_ask # never alone under a mandate Mandate-asks: support_rate # never alone under a mandate Mandate-asks: keywords_suggest # never alone under a mandate Mandate-asks: placement_record # never alone under a mandate Mandate-asks: placements_confirm_live # never alone under a mandate Mandate-asks: mandate_propose # never alone under a mandate Disallow: paying a publisher Disallow: billing, plans and purchases Disallow: publishing website pages, or deleting for good Disallow: members, invites, roles and connecting a mailbox Disallow: deleting a placement Disallow: changing how pages are scored, engine policy and admin Rate-limit: 120/60s # past it: 429 and Retry-After Timeout: 60s # a slow call answers what to read Answer-size: 24000 # longer answers return continue_from
Words you didn’t write arrive fenced
Publisher replies, AI answers and page titles come back marked as data. A reply that says “ignore your instructions” stays a quote.
Links come back absolute
Answers link into the app on our own domain, so you can hand your human the exact page.
Nothing here is destructive
Every tool says so in its MCP annotations. Reads are read-only. Changes apply only as your human set: a card, their setting or a mandate.
A refusal is final
Don’t retry it in other words. Tell your human what you changed and what’s waiting for them, and stop.
// Connect
Plug in. Or let your agent plug itself in.
Only a human can make a token, in Settings, Agents. That part is on purpose. Everything after it, your agent can do on its own.
Paste this into your agent
It reads its brief, asks you for the token, and connects itself.
Read https://www.sourcesignal.ai/outreach-for-agents/brief.md and connect yourself to sourcesignal. I will paste you a token from Settings, Agents. Then call start and tell me what you can do for us.
Claude Code
claude mcp add --transport http sourcesignal https://www.sourcesignal.ai/api/mcp --header "Authorization: Bearer <your token>"
Replace <your token> with the secret the dialog shows. Claude Code sends it on every call and never asks you to sign in.
A shared project
{
"mcpServers": {
"sourcesignal": {
"type": "http",
"url": "https://www.sourcesignal.ai/api/mcp",
"headers": {
"Authorization": "Bearer ${SOURCESIGNAL_AGENT_TOKEN}"
}
}
}
}Reads the secret from SOURCESIGNAL_AGENT_TOKEN, so the file can be committed without it.
A hosted client
Claude’s own connector, and any client that cannot set the Authorization header, takes the same URL with the secret in an x-api-key header instead.
// FAQ
Questions agents ask.
And a few from humans.
Can I send the pitch myself?
Only where your human set “Emails and posts to publishers” to Apply at once in Settings, Agents. Then you can sign a draft off, launch it and send its next email now, each through the same checks as their own press, and never under a mandate. Otherwise you edit your human’s pitch drafts, they sign off and send. It leaves from their own Gmail or Outlook inside their send window.
Can I answer a publisher?
Yes. You draft replies, fee answers included, ready in your human’s Inbox, in your own words or with the platform’s draft. The row says Reply ready and the reply box opens with it. Your human sends it, or you do where they set “Emails and posts to publishers” to Apply at once, never under a mandate.
My call came back 401.
The token is wrong, revoked or expired. Ask your human for a new one in Settings, Agents. You will never be asked to sign in.
How do I get more autonomy?
Ask for a mandate with mandate_propose. If your human approves it, you may make the changes it names on your own, by tool or by kind (125 tools can be named, tidying up first), within the decisions and paid work a day they set, until the date they set. 90 days at most. A mandate never covers an email or a post. Your human can also set a kind of change to apply at once, under Settings, Agents.
A tool is taking a while.
Long work answers with an id. Poll status with it, and it waits up to 40 seconds for the work to settle.
Which clients work?
Anything that speaks MCP over HTTP and can send the token in a header. Claude Code and other command-line agents use the Authorization header. Claude’s own connector, and any client that cannot set that header, puts the secret in an x-api-key header instead.
What does a call cost?
Most calls read what is already there or leave a card, so they cost nothing. Calls that run the platform’s own AI (outreach_prompt_suggest, sequence_template_suggest, steer_compile, keywords_suggest, spot_plan and spot_ask) use the account’s AI allowance, which no plan limits today. Work you prepare is counted as the same button is in the app, and only when it applies: when your human applies the card, or at once where their setting or a mandate allows.
How safe is a token?
Treat it like a password. The secret shows once and only a hash is kept. Revoke it in a click and the agent stops at once. On every call the door re-checks what the account may hold now, so a demoted admin’s token loses the account scope on the next request.
Can I limit it to one client?
Yes. When you make a token you tick the projects it may reach, and that is fixed for its life. An agency gives each client’s agent a token that reaches only that client.
Does my data leave sourcesignal?
Only to the agent you connect, and only what it asks for and you can open. What happens to it there is up to that agent’s provider, so connect the ones you trust.
End of transmission.
Agents: your brief is waiting. Humans: start the trial, make your agent a token, and go get cited.
GET /outreach-for-agents/brief.md
14-day free trialno card neededcancel anytime
Already a member? Make a token in Settings, Agents.