Skip to main content
Glama

solodot-mcp

connect the dots that scale your solo business.

mcp server for solodot. route the active founder painpoint, generate one execution asset, and keep the founder in control through approve, revise, or reject.

features

  • six execution packs: bottleneck, customers, founder functions, learning, trust, and agent workflows.

  • five tools: route, generate, review, inspect, and export.

  • local stdio for codex and claude desktop.

  • authenticated streamable http for remote agents.

  • anthropic and vertex model providers.

  • in-memory local runs or durable supabase runs.

  • docker and apple container support.

  • no silent email, slack, crm, publishing, invoice, or external actions.

Related MCP server: mmc-mcp

requirements

  • node.js 20+

  • an anthropic or vertex api key

  • supabase for remote http mode

  • codex, claude, or another mcp client

apple container requires apple silicon and macos 26. install it from the official releases, then start the service with container system start.

install

cd /Users/0x79de/dev/solodot-mcp
npm install
cp .env.example .env
npm run build

set at least one provider in .env:

SOLODOT_DEFAULT_PROVIDER=anthropic
ANTHROPIC_API_KEY=...

use SOLODOT_DEFAULT_PROVIDER=vertex with VERTEX_API_KEY for vertex.

setup

codex

add a local stdio server to ~/.codex/config.toml:

[mcp_servers.solodot]
command = "node"
args = ["/Users/0x79de/dev/solodot-mcp/dist/stdio.js"]
env = { SOLODOT_DEFAULT_PROVIDER = "anthropic", ANTHROPIC_API_KEY = "your-key" }

claude desktop

add this to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "solodot": {
      "command": "node",
      "args": ["/Users/0x79de/dev/solodot-mcp/dist/stdio.js"],
      "env": {
        "SOLODOT_DEFAULT_PROVIDER": "anthropic",
        "ANTHROPIC_API_KEY": "your-key"
      }
    }
  }
}

restart the client after changing its config. ready-to-copy examples live in examples/.

usage

after setup, ask your agent:

  • "route the biggest painpoint in my solo business."

  • "turn this route into the execution asset i should use this week."

  • "revise the asset for a narrower b2b saas buyer."

  • "approve it and export the run as markdown."

the normal flow is:

route_painpoint
  -> generate_execution_asset
  -> review_execution_asset
  -> export_solodot_run

approval records founder intent. it never executes the asset outside solodot.

remote http

remote mode serves POST /mcp and GET /health on port 8787.

configure:

SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SECRET_KEY=...
SOLODOT_MCP_API_KEYS=long-random-founder-token
ANTHROPIC_API_KEY=...

run:

npm run build
npm run start:http

remote codex config:

[mcp_servers.solodot]
url = "https://mcp.example.com/mcp"
bearer_token_env_var = "SOLODOT_MCP_TOKEN"

use the same public https endpoint and bearer token for a claude custom connector or another remote mcp host.

apple container

solodot uses the same oci image for apple container and docker.

container system start
npm run container:build
npm run container:run

container:run reads .env, starts solodot-mcp with an init process, and publishes only 127.0.0.1:8787.

npm run container:health
npm run container:logs
npm run container:stop

override defaults when needed:

SOLODOT_MCP_ENV_FILE=/absolute/path/to/solodot.env \
SOLODOT_MCP_PORT=9000 \
npm run container:run

apple container runs linux containers as lightweight virtual machines on apple silicon. the image remains portable to any oci-compatible runtime.

docker

build from the standalone mcp repository:

cd /Users/0x79de/dev/solodot-mcp
docker build -t solodot-mcp:local .
docker run --init --rm --env-file .env -p 127.0.0.1:8787:8787 solodot-mcp:local

tools

  • route_painpoint: choose exactly one execution pack.

  • generate_execution_asset: create the full asset for that fixed route.

  • review_execution_asset: approve, revise, or reject.

  • get_solodot_run: inspect diagnosis, assets, and approvals.

  • export_solodot_run: return an approved asset as markdown or json.

resources are available at solodot://execution-packs, solodot://approval-boundaries, and solodot://product-context.

slack

an mcp-capable agent can call solodot while its conversation lives in slack.

this is not a native slack bot. it does not read channels, receive slash commands, or post messages.

development

npm run typecheck
npm test
npm run build

inspect the local server:

npx @modelcontextprotocol/inspector node dist/stdio.js

Available Tools

5 tools
export_solodot_runExport an approved Solodot runA
Read-onlyIdempotent

Return an approved execution asset as Markdown or JSON. The tool returns content only; it does not write files, post messages, or publish.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYes
formatYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by clarifying the tool returns content only and does not write files or publish, reinforcing the annotations. It does not cover error cases like unapproved runs, but overall it aids understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no redundant information. The first sentence states core purpose, and the second adds behavioral clarification. It is front-loaded and efficient, earning a high score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with good annotations and two parameters, the description is adequate but not fully complete. It lacks details about error conditions (e.g., unapproved run) and return structure, which could be helpful given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. The description mentions output formats ('Markdown or JSON'), which hints at the format parameter, but does not describe runId or provide additional meaning for either parameter. The schema itself provides basic info, but the description adds minimal parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns an approved execution asset in Markdown or JSON format. The verb 'Return' and resource 'approved execution asset' are specific. It implicitly distinguishes from siblings like generate_execution_asset by focusing on export of an already approved asset.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for exporting approved runs but does not explicitly compare with siblings or provide when-not-to-use guidance. The context is clear but lacks direct alternative differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_execution_assetGenerate the routed execution assetA

Generate one concrete, preview-only execution asset for the pack already selected by route_painpoint. The routed pack cannot be changed by this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYes
correctionsNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false. The description adds that the asset is 'preview-only' and that the pack cannot be changed, which provides useful but limited further context about side effects. No mention of auth or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and front-loads the core purpose. Every sentence adds value without fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 2 parameters and no output schema. The description states the pack is selected by route_painpoint, but does not describe the output format, what corrections are for, or what to do after generation. Given the complexity, more context would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema provides no parameter documentation. The tool description does not explain the meaning or usage of 'runId' or 'corrections' beyond what the schema defines (e.g., lengths). This forces the agent to infer parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool generates a preview-only execution asset for a pack selected by route_painpoint, using specific verbs and resources. It distinguishes itself from sibling tools like route_painpoint (selection) and review_execution_asset (review).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies that this tool should be used after route_painpoint and that the pack cannot be changed, providing clear context. However, it lacks explicit guidance on when not to use it or alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_solodot_runInspect a Solodot runA
Read-onlyIdempotent

Return the authenticated founder's diagnosis, generated assets, approval history, and latest recommended step.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by detailing what the tool returns (diagnosis, assets, approval history, latest step), providing context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no unnecessary words. It efficiently conveys the tool's purpose and output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with one parameter and no output schema, the description adequately explains what data is returned. However, it lacks edge case information (e.g., error handling, null fields) and does not mention return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the tool description does not explain the 'runId' parameter. The agent must infer its purpose from the name alone, which is insufficient for a required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb 'return' and the resource 'Solodot run', and lists the specific data returned (diagnosis, assets, approval history, latest step). This distinguishes it from siblings like export_solodot_run or generate_execution_asset.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The description implies it's for inspecting a run, but does not state when not to use it or mention sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

review_execution_assetReview an execution assetA

Record approve, revise, or reject for a generated Solodot asset. Approval records acceptance only and never executes the asset externally.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYes
reasonNo
assetIdYes
decisionYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate the tool is not read-only, not idempotent, and not destructive. The description adds transparency by specifying that approval 'never executes the asset externally,' providing important behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, directly states purpose and a key constraint, with no redundant or extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides core purpose and a behavioral constraint, but lacks explanation of parameters and return values. With 4 parameters and no output schema, additional detail would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. However, it does not explain what runId or assetId refer to, nor does it describe the allowed decision values beyond naming the enum. The optional reason parameter is not mentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool records approve, revise, or reject decisions for a generated Solodot asset, and emphasizes that approval is only acceptance, not external execution. This distinguishes it from sibling tools like generate_execution_asset or export_solodot_run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (to review an asset) and clarifies a key constraint (no external execution), but does not explicitly contrast with alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

route_painpointRoute a founder painpointB

Diagnose the active solo-founder painpoint, select exactly one Solodot execution pack, and return a lightweight action preview. This does not perform external actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
offerYes
stageYes
providerNo
bottleneckYes
founderTypeYes
trustBlockerNo
recentAttemptYes
customerContextNo
weeklyConstraintYes
criticalAssumptionNo
validationEvidenceNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the behavioral trait 'this does not perform external actions,' which clarifies its read-only nature beyond the annotations (destructiveHint=false). This is valuable context, though additional details (e.g., what triggers a pack selection, potential errors) are omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: the first defines the core action, the second adds a crucial caveat. No filler or redundant content. Front-loaded with the primary function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (11 parameters, 6 required, no output schema), the description is severely incomplete. It does not explain what a 'lightweight action preview' is, how the pack is selected, or what the return value contains. The agent has insufficient information to effectively invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description provides no explanation of any of the 11 parameters (6 required). The parameters (offer, stage, bottleneck, etc.) are not described, leaving the agent with no semantic understanding beyond their names. This is a critical gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: diagnose a solo-founder painpoint, select a Solodot execution pack, and return a lightweight action preview. It distinguishes itself from sibling tools (export, generate, get, review) by focusing on routing and diagnosis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the tool does not perform external actions, which indirectly guides when to use it (for non-execution tasks). However, it lacks explicit guidance on when not to use it compared to siblings or alternative approaches. No usage context or exclusion criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedexport_solodot_run
    • First observedgenerate_execution_asset
    • First observedget_solodot_run
    • First observedreview_execution_asset
    • First observedroute_painpoint

TDQS

A4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: route_painpoint diagnoses and selects a pack, generate_execution_asset creates a preview asset, review_execution_asset records approval/revision/rejection, export_solodot_run returns the approved asset, and get_solodot_run retrieves the current state. No two tools overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case: route_painpoint, generate_execution_asset, review_execution_asset, export_solodot_run, get_solodot_run. The verbs are distinct and the nouns are domain-specific, making the pattern predictable and clear.

Tool Count5/5

With 5 tools, the server is well-scoped for the solo founder painpoint workflow. Each tool represents a key step in the process (diagnosis, generation, review, export, status retrieval) without unnecessary duplication or omission.

Completeness4/5

The tool set covers the core lifecycle: route_painpoint starts, generate_execution_asset creates, review_execution_asset evaluates, export_solodot_run delivers, and get_solodot_run provides status. A minor gap is the lack of a tool to update or delete assets or runs, but the workflow is essentially complete for a linear process.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers