submitr.dev MCP server · stdio transport v0.4 — curation live github.com/submitr ↗
DIRECTORY SUBMISSION API / FOR AGENTS

Your agent submits.
You only pay
when it publishes.

One manifest, many directories, pay per publish. submitr is an MCP server: your agent sends a project manifest, gets a priced quote, you approve — and funds are captured only when a listing actually goes live.

founder: "Submit my project to directories, budget $20."
agent: builds manifest → gets quote → you approve → submitr distributes.
Read the tool contract
agent session — quote → approve → commit
# add the server to your agent $ claude mcp add --transport stdio submitr -- npx -y submitr ✓ registered 3 tools: quote_submission · submit · submission_status agent▶ quote_submission(manifest, policy) ← 12 directories matched ├─ launch-pack $18.50 7 dirs authority ≥ 40 ├─ devtools-pack $ 9.00 4 dirs authority ≥ 55 └─ submitr directory $ 0.25 api instant funds held in escrow · captured only on `published` founder▶ approve: launch-pack agent▶ submit(manifest, { bundle: "launch-pack" }) ← job job_7f3a · 7 listings · escrow $18.50 agent▶ submission_status(job_7f3a) 6 published · 1 rejected (auto-refunded $2.50) receipts: live listing URLs, one per directory
founder's agentfree skill generates the manifest JSON
submitr MCPquote · submit · status
curation5-stage quality pipeline
adaptersapi / form / email per directory
live listingsreceipts with listing URLs

↩ receipts loop: pay per publish — escrow on submit, capture on published, auto-refund on rejected / failed.

01 / MCP TOOLS

Three tools. That's the whole API.

Submissions are never a blind call. The founder — or their policy — always decides between the quote and the commit.

ToolWhat it doesCost
quote_submission(manifest, policy?) Match directories, return prices + authority scores + review times.
The core contract is a JSON Schema — the companion agent skill generates the manifest from a repo or landing page.
free
submit(manifest, selection, payment_ref?) Create submission jobs. Selection is one union type: explicit ids, a bundle, or a delegated policy.
Escrow on submit — funds are held, not captured.
escrow
submission_status(job_id) Job state + listing URL per directory.
The listing URL is the receipt — auditable proof of publish.
free
02 / SELECTION

Quote → approve → commit.

Explicit picks, curated bundles, and delegated policy are the same API union type — trust levels can evolve without breaking clients.

explicit

you pick

Hand-pick specific directory IDs from the quote. Maximum control, line-item pricing.

{
  "type": "explicit",
  "directory_ids": [
    "submitr-directory",
    "devtools-daily"
  ]
}

bundle

curated pack

Pick a curated pack — launch or devtools — and grow with the registry.

{
  "type": "bundle",
  "bundle_id": "launch"
}

policy

delegate to agent

Delegate spend to your agent inside hard rules — budget cap, authority floor, blocklist.

{
  "type": "policy",
  "max_budget_usd": 25,
  "min_authority_score": 40,
  "price_ceiling_per_directory": 5
}
03 / PAYMENTS

Pay per publish. Escrow, not blind spend.

x402-native: the agent pays in USDC inside the same request loop — no account, no signup.

escrowed Funds held when submit() creates the job. held
captured Charged only when the listing reaches published. published
refunded Auto-refunded on rejected or failed — no action needed. $0.00
forfeited Spam forfeits the escrow. Legit rejections always refund. spam only

Failed attempts cost the founder nothing. This is what makes agents willing to spend autonomously — the downside of a rejection is zero.

Every submission_status response carries the live listing URL as the receipt, so spend is always auditable per directory.

SUBMITR_PAYMENTS=x402 · off by default in v0.4
04 / CURATION

Curation is the product.

A paid automated submission API is a spam magnet. The five-stage quality pipeline is the barrier to entry — and the reason directories accept submitr listings.

s1 mechanical URL resolves, HTTPS, not a parked domain.
s2 dedup Exact URL match + description embedding similarity.
s3 llm_screen Description authenticity, category fit, policy violations.
s4 reputation submitter_identity history — ban or fast-track.
s5 human_review Edge cases and premium tiers.

house rule — legit rejections refund, spam forfeits. adapters carry a health score: a directory changes its form → success rate drops → auto-quarantine and fix.

05 / ADAPTERS

One adapter per directory.

However a directory takes submissions, there's an adapter for it — and each one is monitored for drift.

api

working

The directory exposes a submission endpoint. submitr's own directory ships first — near-zero marginal cost, the cheap tier.

POST /listings
→ 201 · listing_url

form

working

Playwright browser automation fills the directory's form, then polls the inbox for the confirmation email.

playwright → fill → submit
poll inbox → confirm → live

email

planned

Submission by email — natively agent-friendly, no browser required.

manifest → MIME → send
reply-thread → receipt
06 / STATUS

v0.4 — curation live.

Open roadmap, no vaporware. Everything marked TODO in the code is the remaining work.

Shipped 6 / 10

  • Durable job store + queue SQLite · crash recovery
  • Payment rail x402 · escrow / capture / refund
  • Curation stages 1–4 mechanical → reputation
  • Form adapter Playwright + email confirm
  • Bundles launch · devtools

Next in order

  • submitr's own directory service the live api target
  • Hardening before real money x402 validation · embedding dedup
  • First real external directories verified form configs
  • Policy-delegated auto-submit hosted HTTP + OAuth
07 / INSTALL

Wire it into your agent.

stdio MCP server. Works with Claude Code, Claude Desktop, Cursor — anything that speaks MCP.

$ claude mcp add --transport stdio submitr -- npx -y submitr
.mcp.json — project scope, check it in for the team
{ "mcpServers": { "submitr": { "type": "stdio", "command": "npx", "args": ["-y", "submitr"], "env": { "SUBMITR_PAYMENTS": "${SUBMITR_PAYMENTS:-off}" } } } }