list_projects
scope: readfreeList all projects in the authenticated workspace, including competitors and target ICP.
No parameters. Send an empty JSON object.
Every tool is defined once in @launchengine-dev/contracts and served two ways: as an MCP tool, and over HTTP. The schemas below are read from that registry, so they match what the server accepts.
Create a key on the agents page, then send it as a bearer token:
Authorization: Bearer le_live_...
A key is scoped to one workspace. Requests are rate limited per key (default 60/minute); exceeding it returns a retryable error.
The MCP server is a thin proxy to the same endpoints, published as @launchengine-dev/mcp. It needs no clone and no local API — the default points at production.
{
"mcpServers": {
"launchengine": {
"command": "npx",
"args": ["-y", "@launchengine-dev/mcp"],
"env": { "LAUNCHENGINE_DEV_API_KEY": "le_live_..." }
}
}
}
Claude Code needs one command instead:
claude mcp add launchengine \
--env LAUNCHENGINE_DEV_API_KEY=le_live_... \
-- npx -y @launchengine-dev/mcp
Running npx -y @launchengine-dev/mcp by hand prints one line and then waits — that is a working stdio server, not a hang. It answers --help and --version if you want to check the install.
POST /api/tools/<tool_name>
Content-Type: application/json
{ ...tool input... }
The response is always { ok: true, data } on success or { ok: false, error: { code, message, retryable } } on failure, using the codes in the shared contract.
List all projects in the authenticated workspace, including competitors and target ICP.
No parameters. Send an empty JSON object.
Return the workspace credit balance and current plan. Free; use before a metered call.
No parameters. Send an empty JSON object.
Scan Reddit/X/HN (via SERP indexes) for high-intent posts matching a project's keywords and competitors. Returns scored signals. Metered.
| Field | Type | Required | Default |
|---|---|---|---|
| project_id | string | yes | — |
| min_intent_score | number | no | 60 |
| platforms | array | no | ["hackernews","reddit","web"] |
| since_days | number | no | 30 |
| status | enum | no | — |
| limit | number | no | 20 |
| scan | boolean | no | false |
| web_mode | enum | no | "single" |
| include_muted | boolean | no | false |
Fetch full details for a single intent signal by id, including the post snippet.
| Field | Type | Required | Default |
|---|---|---|---|
| intent_id | string | yes | — |
Draft a consultative reply to an intent signal. Assistive only: a human must review and post it. Metered.
| Field | Type | Required | Default |
|---|---|---|---|
| intent_id | string | yes | — |
| tone | enum | no | "consultative" |
Create or update a monitoring subscription for a keyword and competitor set within a project.
| Field | Type | Required | Default |
|---|---|---|---|
| project_id | string | yes | — |
| keyword | string | yes | — |
| competitors | array | no | [] |
Metered tools deduct credits before the work runs and refund on failure. Call get_credit_balance before a metered call if you need to check first — it is free.
draft_reply always returns requires_human_post: true. Nothing is posted on your behalf, by design — Reddit and Hacker News treat automated self-promotion as spam. generated_by reports whether a model or the deterministic fallback produced the text, so a caller can tell a real generation from a generic one.