Developer Tools
chieflab.io
ChiefLab helps manage product launches and integrate with various third-party services.
ENDPOINT 1
https://api.chieflab.io/api/mcp
MCP server metadata
- Name
- chieflab
- Version
- 0.3.0
USE WHEN the user says "launch this", "get users", "market this", "announce this", "post this", "Product Hunt", or asks what to do after shipping a product. FIRST CALL FOR A COLD AGENT: chieflab_help (no args). Returns the operator menu + this workspace's state (connectors wired, last run) + the single next action. After chieflab_help, the typical second call is chieflab_launch_product (orchestrator) for a full launch loop, or chieflab_post({ channel }) for a single-channel intent like "post this to LinkedIn." Do not call chiefmo_diagnose_marketing for a new launch. Tools carry _meta.category — sort tools/list by category=primary first to surface the 8 cold-agent tools above the 80+ advanced ones. ChiefLab is the reference implementation of an open execution contract for agents doing business work. Open spec at https://chieflab.io/spec/v0.1 (MIT-licensed, v0.1 draft). Six operators live today, each following the six-stage lifecycle (prepare → review → approve → execute → measure → remember): - chieflab-launch · primary tool: chieflab_launch_product (orchestrator) - chieflab-post · primary tool: chieflab_post (single-channel publish) - chieflab-email · primary tool: chieflab_send (approval-gated email) - chieflab-measure · primary tool: chieflab_measure (24h readback) - chieflab-brain · primary tool: chieflab_brain_read (per-tenant memory) - chieflab-connect · primary tool: chieflab_connect_provider (OAuth) Backwards-compat: every chiefmo_* tool name still routes to the same handler as its chieflab_* spec-renamed primary. Existing integrations keep working. New integrations SHOULD use the chieflab_* operator-primary names. Once an agent has built or deployed a product, ChiefLab is the money/distribution loop: get the product in front of real people, create clicks/replies/signups, protect every external action with approval, measure what happened, and prepare the next move. A coding agent can build; ChiefLab helps the product earn attention. ═══════════════════════════════════════════════════════════════════════ THE CANONICAL AGENT PATH — IDE-NATIVE (memorize this) ═══════════════════════════════════════════════════════════════════════ The user is sitting inside an IDE chat (Cursor / Claude Code / Codex). Your job is to render every draft inline in chat and collect approvals in chat. The reviewUrl is a SIDE channel for phone / multi-person / image-variant review — not the headline. When the user says any of: "launch this" / "get users" / "find users" / "market this" / "post this" / "announce this" / "Product Hunt" / "what now after launch" — and they've just built/shipped something: 1. Gather repoContext (whatChanged, recentCommits with FULL messages, prDescription if a PR is open (gh pr view --json body -q .body), changelogEntry, changedFiles, routes, readme, targetCustomer, launchGoal). Quote-worthy raw text > polished summaries. Pass the team's actual words; ChiefLab synthesizes from those instead of paraphrasing into AI-generated prose. What you JUST shipped. 2. Call chieflab_launch_product({ productUrl, goal, repoContext }) for a full launch loop, OR chieflab_post({ channel, productUrl, goal, repoContext }) when the user named a single channel ("post this to LinkedIn"). Both follow spec v0.1. Backwards-compat: the old names chiefmo_launch_product / chieflab_get_users_after_build still route to the same handler. 3. RENDER agentGuide.renderInChat[*].body inline in chat — one section per channel (LinkedIn, X, Hacker News, Reddit, Email, etc). Each section shows the actual final copy, not a link, not a brief. 4. Send agentGuide.userMessage verbatim — it tells the user how to approve in chat ("approve linkedin", "approve all") AND surfaces the reviewUrl as a side-channel for mobile/team approval. 5. WAIT for the user to say approve / reject / revise. Do not retry. Do not push the user to the reviewUrl unless they ask. 6. ITERATION (the vibe-code loop — DO NOT skip): if the user says "make the LinkedIn one punchier" / "shorter" / "more casual" / "add the $40 number" / "less salesy" / any partial-edit instruction — use the TWO-CALL pattern: (a) chieflab_redraft({ actionId, instruction }) → returns the brief with originalBody + the instruction. The action row already starts revising. (b) Render the new body in YOUR LLM following the instruction. (c) COMMIT: chieflab_redraft({ actionId, instruction, body: "<your rendered text>" }) OR chieflab_record_rendered_copy ({ assetId, body }). Without this commit, the new body lives only in your chat — the action row and brain never see it, which breaks the per-workspace compounding loop. Action row updates in place (same actionId, revision++, history preserved). DO NOT re-call chieflab_launch_product to tweak one channel — that's the API loop, not the iteration loop. Use redraft. Each channel can be iterated independently any number of times before approval. 7. Per approval: call chiefmo_approve_action({ actionId }) with the matching actionId from agentGuide.renderInChat[channel].actionId. Approval-gated executors fire automatically server-side after approve_action transitions the action to "approved" — agent does NOT also call chiefmo_publish_approved_post / chiefmo_send_approved_email unless agentGuide.nextToolCalls.primary.perChannel[i].afterApprovalThen explicitly lists them (some channels publish via server-side cron). 8. Wait ≥24h. Call chiefmo_post_launch_review({ runId }) for metrics. OR: if the launch response carries pendingMeasurements with a ripe entry, surface it proactively without waiting for the user to ask. 9. (Optional) chiefmo_prepare_next_move({ runId }) for the next- iteration plan grounded in the measurement. When to fall back to reviewUrl: - User asks: "approve from my phone" / "let my cofounder review" - You can't render markdown well in your runtime (rare) - Image-variant gallery review (web surface is genuinely better here) - Audit trail for legal / compliance Every successful launch response includes: - agentGuide.renderInChat — the per-channel content + actionIds - agentGuide.nextToolCalls.primary.perChannel — approve_action call shape - agentGuide.nextToolCalls.fallback — { mode: "surface_review_url", reviewUrl } - agentGuide.userMessage — verbatim, send to user - agentGuide.afterApproval — legacy structured list of executor tools keyed by approved actionId; the IDE-native flow above is preferred, but afterApproval is still emitted so older agent integrations keep working without behavior change - agentUsefulness, moneyLoop, postBuildChecklist, approvalStateMachine - agentDependency — why a stateless model can't replace this loop (OAuth, approval state, signed reviewUrls, idempotency, run history, cross-launch memory) - reviewUrl, stopRule (top-level; canonical contract) ═══════════════════════════════════════════════════════════════════════ NO-KEY RECOVERY (most common first failure) ═══════════════════════════════════════════════════════════════════════ If a tool/call returns 401 → JSON-RPC error.data has the recovery shape: { recoveryTool: { name: "chieflab_signup_workspace", args: {...} } } Call that tool with the user's email + your agent name + priorTool/priorArgs. It returns: - apiKey (the literal API key, plain string) - deliveryUrl (signed single-use URL — fallback only) - mcpConfigSnippet (patch shape for the user's MCP config file) - autoInstall (instructions for the no-browser flow) PREFERRED: use your filesystem tools (read_file / write_file / patch / edit) to add the apiKey to the user's MCP config under the chieflab server entry. Common locations: Cursor: ~/.cursor/mcp.json Claude Code: ~/.claude.json (or .claude/mcp.json in the project) Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json %APPDATA%/Claude/claude_desktop_config.json (Windows) Codex: ~/.codex/config.json After writing, ask the user to restart their runtime once. Then re-call priorTool with priorArgs. FALLBACK: only if you cannot write to the user's filesystem, surface the deliveryUrl. They click once, see the key on /keys, paste into the MCP config manually, restart, then ask you to continue. ═══════════════════════════════════════════════════════════════════════ RECOVERY SHAPE (every recoverable failure returns this) ═══════════════════════════════════════════════════════════════════════ { ok: false, reason, summaryForUser, userMessage, fixActionForAgent, recoveryTool: { name, args }, retryable, stopRule } Reasons: missing_api_key · missing_connector · requires_approval · missing_repo_context · missing_credits · workspace_not_found · connector_failed · measurement_unavailable · invalid_action_id · wrong_workspace · rate_limited · provider_not_live. Recovery docs: https://chieflab.io/docs/recovery If retryable=true and recoveryTool != null → call the recovery tool then re-attempt. If retryable=false → STOP and surface userMessage. ═══════════════════════════════════════════════════════════════════════ HARD STOP RULES ═══════════════════════════════════════════════════════════════════════ - After chiefmo_launch_product returns reviewUrl → STOP. Surface it. Wait. - After requires_approval → STOP. Surface reviewUrl. Do not retry the publish/send. - After missing_connector → surface the connect link OR offer manual fallback. - Never call chiefmo_publish_approved_post or chiefmo_send_approved_email without an approved actionId. The server-side gate will reject premature calls; this rule keeps the agent flow clean. ═══════════════════════════════════════════════════════════════════════ TOOL TIERS (do not call non-primary tools first) ═══════════════════════════════════════════════════════════════════════ PRIMARY (call first): chiefmo_launch_product, chieflab_get_users_after_build NO-KEY RECOVERY: chieflab_signup_workspace AFTER APPROVAL: chiefmo_publish_approved_post, chiefmo_send_approved_email AFTER 24h: chiefmo_post_launch_review (chiefmo_measure_launch_results = alias) AFTER MEASUREMENT (optional): chiefmo_prepare_next_move RECOVERY: chieflab_connect_provider, chieflab_use_manual_fallback, chieflab_record_manual_publish, chieflab_get_connect_action, chieflab_retry_blocked_action ADVANCED (do NOT call first): chiefmo_diagnose_marketing, chiefmo_gtm_run_start (multi-agent), chiefmo_create_run, all per-skill tools DO NOT use chiefmo_diagnose_marketing for first-time launches — that's for diagnosing EXISTING marketing programs. Use chiefmo_launch_product.
Known tools 45
chieflab_helpFIRST TOOL — call before anything else when you don't know what ChiefLab does or where to start.
Inferred read-onlychieflab_connect_providerConnect a third-party provider (Zernio, Resend, GA4, Search Console, HubSpot, Stripe, Linear, Notion, Slack) to this workspace.
Potential side effectschieflab_retry_blocked_actionP13 — re-check a blocked publishAction's connector readiness.
Inferred read-onlychieflab_use_manual_fallbackUSE WHEN any launch action carries a manualFallback brief — either because the channel has no automated provider at all (Product Hunt, Hacker News, Reddit, Discord, Slack, Indie Hackers, dev.
Potential side effectschieflab_list_specialistsP87 — list the specialist agents ChiefLab can delegate to (design / video / research / outreach / seo / analytics).
Inferred read-onlychieflab_set_publishing_targetsP79 — set per-workspace publishing target defaults so chiefmo_approve_action({ autoExecute: true }) doesn't need the agent to pass platform / recipient ids on every call.
Inferred read-onlychieflab_get_publishing_targetsP79 — read the workspace's stored publishing target defaults.
Inferred read-onlychieflab_create_next_move_actionP75 — turn a Next Move suggestion into an approval-gated draft action.
Inferred read-onlychieflab_regenerate_visual_assetP72 — regenerate a single visual asset (LinkedIn graphic, X graphic, landing hero, etc.
Inferred read-onlychieflab_record_manual_metricsP116 — paste-what-you-see metric fallback for channels without public-API measurement (X, LinkedIn, Email, landing pages, Product Hunt).
Potential side effectschieflab_measure_redditP115 — pull a Reddit post's score + comments + upvote ratio + top replies via the public Reddit JSON API and write them to the action's metadata.
Potential side effectschieflab_measure_hacker_newsP109 — pull a Hacker News post's score + comments + top replies via the public HN API and write them to the action's metadata.
Potential side effectschieflab_review_visual_assetP104 — approve or reject a single visual asset (LinkedIn graphic / X image / landing hero / Product Hunt gallery / carousel slide).
Inferred read-onlychieflab_skip_next_moveP142 — founder rejects a next-move recommendation without doing it.
Inferred read-onlychieflab_mark_action_doneP135 — mark a next-move action as completed when the founder has done the move BUT there's no URL to record (e.
Inferred read-onlychieflab_record_manual_publishUSE WHEN the user has manually posted to a channel returned by chieflab_use_manual_fallback (Product Hunt / HN / Reddit / Discord / etc.
Inferred read-onlychieflab_connector_statusUSE WHEN the user just completed a connector OAuth flow and you want to confirm it succeeded — 'did my connection work?
Inferred read-onlychieflab_signup_workspaceUSE WHEN the user has no ChiefLab API key yet and you've gotten a 401 / 'authentication required' error from any other tool.
Inferred read-onlychieflab_redraftUSE WHEN the user says 'make this more casual' / 'shorter' / 'less salesy' / 'add a specific number' / 'redraft this' about a published draft.
Inferred read-onlychieflab_statusSESSION-RECOVERY · FIRST CALL when a session starts and the user mentions launch / users / growth / customers / metrics / revenue / marketing / what next / shipping.
Inferred read-onlychieflab_brain_summaryUSE WHEN the user asks 'what do you remember about my brand?
Inferred read-onlychieflab_search_capabilitiesUSE WHEN your operator needs a capability outside its own scope and wants to find another operator that can fulfill it — 'find me a demo-video capability', 'who can do SEO audits', 'search for design help'.
Inferred read-onlychieflab_get_capabilityUSE WHEN you have a specific operatorId + capability and want the full machine-readable profile (inputs, outputs, pricing, approval-required flag, endpoint).
Inferred read-onlychieflab_create_work_requestUSE WHEN your operator hits a gap it can't fulfill itself and wants to route the work to another operator — 'I need a demo video for this launch', 'request design help for the hero image'.
Inferred read-onlychieflab_approve_action[chieflab_* alias of chiefmo_approve_action] Approve one ChiefMO publish/send action so its executor can fire.
Potential side effectschieflab_continue_launch_loop[chieflab_* alias of chiefmo_continue_launch_loop] Resume a ChiefLab launch loop from runId.
Inferred read-onlychieflab_post_launch_review[chieflab_* alias of chiefmo_post_launch_review] USE WHEN ≥24h has passed since chiefmo_publish_approved_post fired and the user asks 'how did the launch perform?
Inferred read-onlychieflab_prepare_next_move[chieflab_* alias of chiefmo_prepare_next_move] USE WHEN the user has just published a launch (or ≥24h post-launch) and asks 'what's next?
Potential side effectschieflab_publish_approved_post[chieflab_* alias of chiefmo_publish_approved_post] Publish an approved social post (LinkedIn / X / Threads / Instagram / Facebook / Bluesky / TikTok) through the social publishing rail (current adapter: zernio).
Potential side effectschieflab_send_approved_email[chieflab_* alias of chiefmo_send_approved_email] Send an approved launch email through the email sending rail (current adapter: resend).
Potential side effectsCONNECT WITH APPROVAL
Client installation
Review this server and its permissions before adding it. Secret placeholders must be set locally.
Codex
~/.codex/config.toml
[mcp_servers.chieflab]
url = "https://api.chieflab.io/api/mcp"
enabled = true
Claude Code
.mcp.json
{
"mcpServers": {
"chieflab": {
"type": "http",
"url": "https://api.chieflab.io/api/mcp"
}
}
}
Claude Desktop
Settings → Connectors → Add custom connector
Name: chieflab
Remote MCP URL: https://api.chieflab.io/api/mcp
Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.
Cursor
.cursor/mcp.json
{
"mcpServers": {
"chieflab": {
"url": "https://api.chieflab.io/api/mcp"
}
}
}
Visual Studio Code
.vscode/mcp.json
Add to Visual Studio Code{
"servers": {
"chieflab": {
"type": "http",
"url": "https://api.chieflab.io/api/mcp"
}
}
}
Generic MCP
Client-specific MCP configuration
{
"name": "chieflab",
"transport": "streamable-http",
"url": "https://api.chieflab.io/api/mcp"
}
MCP Inspector
Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.
ENDPOINT 2
https://chieflab.io/api/mcp
MCP server metadata
- Name
- chieflab
- Version
- 0.3.0
USE WHEN the user says "launch this", "get users", "market this", "announce this", "post this", "Product Hunt", or asks what to do after shipping a product. FIRST CALL FOR A COLD AGENT: chieflab_help (no args). Returns the operator menu + this workspace's state (connectors wired, last run) + the single next action. After chieflab_help, the typical second call is chieflab_launch_product (orchestrator) for a full launch loop, or chieflab_post({ channel }) for a single-channel intent like "post this to LinkedIn." Do not call chiefmo_diagnose_marketing for a new launch. Tools carry _meta.category — sort tools/list by category=primary first to surface the 8 cold-agent tools above the 80+ advanced ones. ChiefLab is the reference implementation of an open execution contract for agents doing business work. Open spec at https://chieflab.io/spec/v0.1 (MIT-licensed, v0.1 draft). Six operators live today, each following the six-stage lifecycle (prepare → review → approve → execute → measure → remember): - chieflab-launch · primary tool: chieflab_launch_product (orchestrator) - chieflab-post · primary tool: chieflab_post (single-channel publish) - chieflab-email · primary tool: chieflab_send (approval-gated email) - chieflab-measure · primary tool: chieflab_measure (24h readback) - chieflab-brain · primary tool: chieflab_brain_read (per-tenant memory) - chieflab-connect · primary tool: chieflab_connect_provider (OAuth) Backwards-compat: every chiefmo_* tool name still routes to the same handler as its chieflab_* spec-renamed primary. Existing integrations keep working. New integrations SHOULD use the chieflab_* operator-primary names. Once an agent has built or deployed a product, ChiefLab is the money/distribution loop: get the product in front of real people, create clicks/replies/signups, protect every external action with approval, measure what happened, and prepare the next move. A coding agent can build; ChiefLab helps the product earn attention. ═══════════════════════════════════════════════════════════════════════ THE CANONICAL AGENT PATH — IDE-NATIVE (memorize this) ═══════════════════════════════════════════════════════════════════════ The user is sitting inside an IDE chat (Cursor / Claude Code / Codex). Your job is to render every draft inline in chat and collect approvals in chat. The reviewUrl is a SIDE channel for phone / multi-person / image-variant review — not the headline. When the user says any of: "launch this" / "get users" / "find users" / "market this" / "post this" / "announce this" / "Product Hunt" / "what now after launch" — and they've just built/shipped something: 1. Gather repoContext (whatChanged, recentCommits with FULL messages, prDescription if a PR is open (gh pr view --json body -q .body), changelogEntry, changedFiles, routes, readme, targetCustomer, launchGoal). Quote-worthy raw text > polished summaries. Pass the team's actual words; ChiefLab synthesizes from those instead of paraphrasing into AI-generated prose. What you JUST shipped. 2. Call chieflab_launch_product({ productUrl, goal, repoContext }) for a full launch loop, OR chieflab_post({ channel, productUrl, goal, repoContext }) when the user named a single channel ("post this to LinkedIn"). Both follow spec v0.1. Backwards-compat: the old names chiefmo_launch_product / chieflab_get_users_after_build still route to the same handler. 3. RENDER agentGuide.renderInChat[*].body inline in chat — one section per channel (LinkedIn, X, Hacker News, Reddit, Email, etc). Each section shows the actual final copy, not a link, not a brief. 4. Send agentGuide.userMessage verbatim — it tells the user how to approve in chat ("approve linkedin", "approve all") AND surfaces the reviewUrl as a side-channel for mobile/team approval. 5. WAIT for the user to say approve / reject / revise. Do not retry. Do not push the user to the reviewUrl unless they ask. 6. ITERATION (the vibe-code loop — DO NOT skip): if the user says "make the LinkedIn one punchier" / "shorter" / "more casual" / "add the $40 number" / "less salesy" / any partial-edit instruction — use the TWO-CALL pattern: (a) chieflab_redraft({ actionId, instruction }) → returns the brief with originalBody + the instruction. The action row already starts revising. (b) Render the new body in YOUR LLM following the instruction. (c) COMMIT: chieflab_redraft({ actionId, instruction, body: "<your rendered text>" }) OR chieflab_record_rendered_copy ({ assetId, body }). Without this commit, the new body lives only in your chat — the action row and brain never see it, which breaks the per-workspace compounding loop. Action row updates in place (same actionId, revision++, history preserved). DO NOT re-call chieflab_launch_product to tweak one channel — that's the API loop, not the iteration loop. Use redraft. Each channel can be iterated independently any number of times before approval. 7. Per approval: call chiefmo_approve_action({ actionId }) with the matching actionId from agentGuide.renderInChat[channel].actionId. Approval-gated executors fire automatically server-side after approve_action transitions the action to "approved" — agent does NOT also call chiefmo_publish_approved_post / chiefmo_send_approved_email unless agentGuide.nextToolCalls.primary.perChannel[i].afterApprovalThen explicitly lists them (some channels publish via server-side cron). 8. Wait ≥24h. Call chiefmo_post_launch_review({ runId }) for metrics. OR: if the launch response carries pendingMeasurements with a ripe entry, surface it proactively without waiting for the user to ask. 9. (Optional) chiefmo_prepare_next_move({ runId }) for the next- iteration plan grounded in the measurement. When to fall back to reviewUrl: - User asks: "approve from my phone" / "let my cofounder review" - You can't render markdown well in your runtime (rare) - Image-variant gallery review (web surface is genuinely better here) - Audit trail for legal / compliance Every successful launch response includes: - agentGuide.renderInChat — the per-channel content + actionIds - agentGuide.nextToolCalls.primary.perChannel — approve_action call shape - agentGuide.nextToolCalls.fallback — { mode: "surface_review_url", reviewUrl } - agentGuide.userMessage — verbatim, send to user - agentGuide.afterApproval — legacy structured list of executor tools keyed by approved actionId; the IDE-native flow above is preferred, but afterApproval is still emitted so older agent integrations keep working without behavior change - agentUsefulness, moneyLoop, postBuildChecklist, approvalStateMachine - agentDependency — why a stateless model can't replace this loop (OAuth, approval state, signed reviewUrls, idempotency, run history, cross-launch memory) - reviewUrl, stopRule (top-level; canonical contract) ═══════════════════════════════════════════════════════════════════════ NO-KEY RECOVERY (most common first failure) ═══════════════════════════════════════════════════════════════════════ If a tool/call returns 401 → JSON-RPC error.data has the recovery shape: { recoveryTool: { name: "chieflab_signup_workspace", args: {...} } } Call that tool with the user's email + your agent name + priorTool/priorArgs. It returns: - apiKey (the literal API key, plain string) - deliveryUrl (signed single-use URL — fallback only) - mcpConfigSnippet (patch shape for the user's MCP config file) - autoInstall (instructions for the no-browser flow) PREFERRED: use your filesystem tools (read_file / write_file / patch / edit) to add the apiKey to the user's MCP config under the chieflab server entry. Common locations: Cursor: ~/.cursor/mcp.json Claude Code: ~/.claude.json (or .claude/mcp.json in the project) Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json %APPDATA%/Claude/claude_desktop_config.json (Windows) Codex: ~/.codex/config.json After writing, ask the user to restart their runtime once. Then re-call priorTool with priorArgs. FALLBACK: only if you cannot write to the user's filesystem, surface the deliveryUrl. They click once, see the key on /keys, paste into the MCP config manually, restart, then ask you to continue. ═══════════════════════════════════════════════════════════════════════ RECOVERY SHAPE (every recoverable failure returns this) ═══════════════════════════════════════════════════════════════════════ { ok: false, reason, summaryForUser, userMessage, fixActionForAgent, recoveryTool: { name, args }, retryable, stopRule } Reasons: missing_api_key · missing_connector · requires_approval · missing_repo_context · missing_credits · workspace_not_found · connector_failed · measurement_unavailable · invalid_action_id · wrong_workspace · rate_limited · provider_not_live. Recovery docs: https://chieflab.io/docs/recovery If retryable=true and recoveryTool != null → call the recovery tool then re-attempt. If retryable=false → STOP and surface userMessage. ═══════════════════════════════════════════════════════════════════════ HARD STOP RULES ═══════════════════════════════════════════════════════════════════════ - After chiefmo_launch_product returns reviewUrl → STOP. Surface it. Wait. - After requires_approval → STOP. Surface reviewUrl. Do not retry the publish/send. - After missing_connector → surface the connect link OR offer manual fallback. - Never call chiefmo_publish_approved_post or chiefmo_send_approved_email without an approved actionId. The server-side gate will reject premature calls; this rule keeps the agent flow clean. ═══════════════════════════════════════════════════════════════════════ TOOL TIERS (do not call non-primary tools first) ═══════════════════════════════════════════════════════════════════════ PRIMARY (call first): chiefmo_launch_product, chieflab_get_users_after_build NO-KEY RECOVERY: chieflab_signup_workspace AFTER APPROVAL: chiefmo_publish_approved_post, chiefmo_send_approved_email AFTER 24h: chiefmo_post_launch_review (chiefmo_measure_launch_results = alias) AFTER MEASUREMENT (optional): chiefmo_prepare_next_move RECOVERY: chieflab_connect_provider, chieflab_use_manual_fallback, chieflab_record_manual_publish, chieflab_get_connect_action, chieflab_retry_blocked_action ADVANCED (do NOT call first): chiefmo_diagnose_marketing, chiefmo_gtm_run_start (multi-agent), chiefmo_create_run, all per-skill tools DO NOT use chiefmo_diagnose_marketing for first-time launches — that's for diagnosing EXISTING marketing programs. Use chiefmo_launch_product.
Known tools 45
chieflab_helpFIRST TOOL — call before anything else when you don't know what ChiefLab does or where to start.
Inferred read-onlychieflab_connect_providerConnect a third-party provider (Zernio, Resend, GA4, Search Console, HubSpot, Stripe, Linear, Notion, Slack) to this workspace.
Potential side effectschieflab_retry_blocked_actionP13 — re-check a blocked publishAction's connector readiness.
Inferred read-onlychieflab_use_manual_fallbackUSE WHEN any launch action carries a manualFallback brief — either because the channel has no automated provider at all (Product Hunt, Hacker News, Reddit, Discord, Slack, Indie Hackers, dev.to, YC Bookface, blog) OR because the channel HAS an automated provider but its connector isn't wired yet for this workspace (LinkedIn / X without a Zernio key; email without a Resend key + verified sender domain).
Potential side effectschieflab_list_specialistsP87 — list the specialist agents ChiefLab can delegate to (design / video / research / outreach / seo / analytics).
Inferred read-onlychieflab_set_publishing_targetsP79 — set per-workspace publishing target defaults so chiefmo_approve_action({ autoExecute: true }) doesn't need the agent to pass platform / recipient ids on every call.
Inferred read-onlychieflab_get_publishing_targetsP79 — read the workspace's stored publishing target defaults.
Inferred read-onlychieflab_create_next_move_actionP75 — turn a Next Move suggestion into an approval-gated draft action.
Inferred read-onlychieflab_regenerate_visual_assetP72 — regenerate a single visual asset (LinkedIn graphic, X graphic, landing hero, etc.) with a different style / fidelity / headline / model.
Inferred read-onlychieflab_record_manual_metricsP116 — paste-what-you-see metric fallback for channels without public-API measurement (X, LinkedIn, Email, landing pages, Product Hunt).
Potential side effectschieflab_measure_redditP115 — pull a Reddit post's score + comments + upvote ratio + top replies via the public Reddit JSON API and write them to the action's metadata.proof.
Potential side effectschieflab_measure_hacker_newsP109 — pull a Hacker News post's score + comments + top replies via the public HN API and write them to the action's metadata.proof.
Potential side effectschieflab_review_visual_assetP104 — approve or reject a single visual asset (LinkedIn graphic / X image / landing hero / Product Hunt gallery / carousel slide).
Inferred read-onlychieflab_skip_next_moveP142 — founder rejects a next-move recommendation without doing it.
Inferred read-onlychieflab_mark_action_doneP135 — mark a next-move action as completed when the founder has done the move BUT there's no URL to record (e.g.
Inferred read-onlychieflab_record_manual_publishUSE WHEN the user has manually posted to a channel returned by chieflab_use_manual_fallback (Product Hunt / HN / Reddit / Discord / etc.) and wants to feed the live URL back to ChiefLab so the closed loop continues.
Inferred read-onlychieflab_connector_statusUSE WHEN the user just completed a connector OAuth flow and you want to confirm it succeeded — 'did my connection work?', 'is my Zernio/HubSpot/Stripe connected?'.
Inferred read-onlychieflab_signup_workspaceUSE WHEN the user has no ChiefLab API key yet and you've gotten a 401 / 'authentication required' error from any other tool.
Inferred read-onlychieflab_redraftUSE WHEN the user says 'make this more casual' / 'shorter' / 'less salesy' / 'add a specific number' / 'redraft this' about a published draft.
Inferred read-onlychieflab_inboxUSE WHEN the user asks 'what came in from my launches?' / 'show me my replies' / 'what's in my inbox?' / 'who responded to the LinkedIn post?'.
Potential side effectschieflab_statusSESSION-RECOVERY · FIRST CALL when a session starts and the user mentions launch / users / growth / customers / metrics / revenue / marketing / what next / shipping.
Inferred read-onlychieflab_brain_summaryUSE WHEN the user asks 'what do you remember about my brand?' / 'show me my brain' / 'what have you learned?'.
Inferred read-onlychieflab_search_capabilitiesUSE WHEN your operator needs a capability outside its own scope and wants to find another operator that can fulfill it — 'find me a demo-video capability', 'who can do SEO audits', 'search for design help'.
Inferred read-onlychieflab_get_capabilityUSE WHEN you have a specific operatorId + capability and want the full machine-readable profile (inputs, outputs, pricing, approval-required flag, endpoint).
Inferred read-onlychieflab_create_work_requestUSE WHEN your operator hits a gap it can't fulfill itself and wants to route the work to another operator — 'I need a demo video for this launch', 'request design help for the hero image'.
Inferred read-onlychieflab_approve_action[chieflab_* alias of chiefmo_approve_action] Approve one ChiefMO publish/send action so its executor can fire.
Potential side effectschieflab_continue_launch_loop[chieflab_* alias of chiefmo_continue_launch_loop] Resume a ChiefLab launch loop from runId.
Inferred read-onlychieflab_post_launch_review[chieflab_* alias of chiefmo_post_launch_review] USE WHEN ≥24h has passed since chiefmo_publish_approved_post fired and the user asks 'how did the launch perform?', 'what worked?', 'metrics from my launch'.
Inferred read-onlychieflab_prepare_next_move[chieflab_* alias of chiefmo_prepare_next_move] USE WHEN the user has just published a launch (or ≥24h post-launch) and asks 'what's next?', 'follow-up post?', 'iterate on this', 'plan day 2'.
Potential side effectschieflab_publish_approved_post[chieflab_* alias of chiefmo_publish_approved_post] Publish an approved social post (LinkedIn / X / Threads / Instagram / Facebook / Bluesky / TikTok) through the social publishing rail (current adapter: zernio).
Potential side effectschieflab_send_approved_email[chieflab_* alias of chiefmo_send_approved_email] Send an approved launch email through the email sending rail (current adapter: resend).
Potential side effectsCONNECT WITH APPROVAL
Client installation
Review this server and its permissions before adding it. Secret placeholders must be set locally.
Codex
~/.codex/config.toml
[mcp_servers.chieflab]
url = "https://chieflab.io/api/mcp"
enabled = true
Claude Code
.mcp.json
{
"mcpServers": {
"chieflab": {
"type": "http",
"url": "https://chieflab.io/api/mcp"
}
}
}
Claude Desktop
Settings → Connectors → Add custom connector
Name: chieflab
Remote MCP URL: https://chieflab.io/api/mcp
Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.
Cursor
.cursor/mcp.json
{
"mcpServers": {
"chieflab": {
"url": "https://chieflab.io/api/mcp"
}
}
}
Visual Studio Code
.vscode/mcp.json
Add to Visual Studio Code{
"servers": {
"chieflab": {
"type": "http",
"url": "https://chieflab.io/api/mcp"
}
}
}
Generic MCP
Client-specific MCP configuration
{
"name": "chieflab",
"transport": "streamable-http",
"url": "https://chieflab.io/api/mcp"
}
MCP Inspector
Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.
TRUST AND VERIFICATION EVIDENCE
Trust Data Available
BuiltWith Trust API v2 evidence for chieflab.io was fetched 2026-08-29T15:20:29.831Z.
chieflab.io is assessed as Neutral: No suspicious signals found, but no strong positive signal either
Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.