_ registry / mcp streamable-http · checked 1h ago

comma

https://commareports.com

Registry code: cf3354cc32f9c082

api record

Comma hosts HTML reports that people can comment on. Publish with create_report (or create_report_from_url for a public web page), then always give the human the absolute share_url from the result as a clickable link. Read their feedback with list_comments, apply it with update_report (same URL), and answer threads with reply_to_comment / set_comment_status.

endpoint
https://commareports.com/api/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is comma live?
Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
Is comma free to use?
Not measured yet.
What tools does comma have?
45 tools: list_comments, set_report_signoff, delete_report_asset, set_report_sharing, list_reviewers, create_reviewer, list_routines, delete_reviewer, ….
Is comma safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
1,567ms

last good check

priced tools
0

of 45 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 45 tools
45 never probed 0 of 45 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • list_comments unknown never probed

    List comments + replies on a report. Cursor-paginated; pass the returned nextCursor to fetch the next page. Each comment embeds up to 50 replies; replies_truncated=true means the thread has more (REST: GET /api/v1/comments/:id/replies).

    mcp-tool

    {
      "type": "object",
      "required": [
        "report_id"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 200,
          "minimum": 1,
          "description": "Defaults to 50. Capped at 200."
        },
        "cursor": {
          "type": "string",
          "description": "Opaque nextCursor from a previous call."
        },
        "report_id": {
          "type": "string",
          "description": "Report id (UUID)."
        }
      }
    }
    arguments 22 lines
  • set_report_signoff unknown never probed

    Submit or replace your review verdict on a report: 'approved' or 'changes_requested', with an optional one-line note. One current verdict per reviewer per report (PR-review semantics); it is pinned to a revision snapshotting the report's content at submission and goes stale when that content changes.

    mcp-tool

    {
      "type": "object",
      "required": [
        "report_id",
        "verdict"
      ],
      "properties": {
        "note": {
          "type": "string",
          "description": "Optional short note that travels with the verdict."
        },
        "verdict": {
          "enum": [
            "approved",
            "changes_requested"
          ],
          "type": "string"
        },
        "report_id": {
          "type": "string",
          "description": "Report id (UUID)."
        }
      }
    }
    arguments 24 lines
  • delete_report_asset unknown never probed

    Delete a previously-uploaded asset by its id. Removes both the storage object and the database row. The report's HTML is not modified — any `<img src>` etc. referencing the deleted asset will 404.

    mcp-tool

    {
      "type": "object",
      "required": [
        "report_id",
        "asset_id"
      ],
      "properties": {
        "asset_id": {
          "type": "string",
          "description": "UUID of the asset (from list_report_assets)."
        },
        "report_id": {
          "type": "string",
          "description": "UUID of the report the asset belongs to."
        }
      }
    }
    arguments 17 lines
  • set_report_sharing unknown never probed

    Publish or unpublish a report and control who can reach its share link (/p/:id). `visibility`: 'public' (anyone with the link), 'registered' (any signed-in user), 'domain' (anyone signed in with a verified email on one of `allowed_email_domains` — required with 'domain', e.g. ['acme.com']), 'team' (the report's team; the report must already be filed under one), or 'private' (owner + invited people only). To change the domain list, send visibility='domain' again with the full new list. `public_permission` is what link/anonymous visitors may do: 'none', 'view', 'comment', or 'edit'. To publish a report so anyone can open and comment on it, set visibility='public' and public_permission='comment'. `show_approved_only` enables staged publishing: view-only audiences see the last revision a reviewer approved (see set_report_signoff) while reviewers keep seeing head. `allowed_embed_origins` opts the report into embedding on other sites: pass the bare origins allowed to iframe it (e.g. ['https://acme.com']), or [] / null to turn embedding off. The response then carries `embed_snippet`, the exact markup to paste into the host page; the embed only renders while the report is public, its link permission isn't 'none', and it has no share password. Requires manage permission on the report (owner or admin).

    mcp-tool

    {
      "type": "object",
      "required": [
        "report_id"
      ],
      "properties": {
        "report_id": {
          "type": "string",
          "description": "UUID of the report."
        },
        "visibility": {
          "enum": [
            "private",
            "team",
            "registered",
            "domain",
            "public"
          ],
          "type": "string",
          "description": "Who can reach the report."
        },
        "public_permission": {
          "enum": [
            "none",
            "view",
            "comment",
            "edit"
          ],
          "type": "string",
          "description": "What link/anonymous visitors may do."
        },
        "show_approved_only": {
          "type": "boolean",
          "description": "Staged publishing: when true, view-only audiences see the last approved revision instead of head."
        },
        "allowed_email_domains": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Email domains allowed to view when visibility='domain' (e.g. ['acme.com']). Required with, and only accepted with, visibility='domain'; replaces the existing list."
        },
        "allowed_embed_origins": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "maxItems": 20,
          "description": "Origins allowed to iframe this report via /embed/:id. Bare origins only — scheme + host + optional port, no path (https://acme.com, https://blog.acme.com:8443). https is required except for http://localhost and http://127.0.0.1. [] or null turns embedding off."
        }
      }
    }
    arguments 55 lines
  • list_reviewers unknown never probed

    List the agent-reviewers you own. A reviewer is a webhook (reviewer_url) Comma calls with a report's content; the reviewer posts back comments. Reviewers with report_id=null apply to every report you own.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • create_reviewer unknown never probed

    Register an agent-reviewer. Comma POSTs the report's content to `reviewer_url`; the reviewer replies with comments. Set report_id to scope it to one report, or omit it for an org-wide reviewer across all your reports. With auto_on_revision=true (default) it runs automatically whenever a new revision is pushed.

    mcp-tool

    {
      "type": "object",
      "required": [
        "reviewer_url"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Display name. Defaults to 'Untitled reviewer'."
        },
        "prompt": {
          "type": "string",
          "description": "Optional instructions passed to the reviewer."
        },
        "enabled": {
          "type": "boolean",
          "description": "Defaults to true."
        },
        "report_id": {
          "type": "string",
          "description": "Scope to one report (you must own it), or omit for org-wide."
        },
        "reviewer_url": {
          "type": "string",
          "description": "http(s) webhook Comma calls to review."
        },
        "auto_on_revision": {
          "type": "boolean",
          "description": "Run automatically on each new revision. Defaults to true."
        },
        "reviewer_auth_header": {
          "type": "string",
          "description": "Optional Authorization header value Comma sends to reviewer_url. Stored encrypted."
        }
      }
    }
    arguments 36 lines
  • list_routines unknown never probed

    List the routines you own. A routine re-runs on a cron schedule, either by calling a webhook (trigger_url) or by running a skill inside Comma (skill_id), and can republish a report.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • delete_reviewer unknown never probed

    Delete an agent-reviewer you own. Comments it already produced stay; their reviewer_id becomes null.

    mcp-tool

    {
      "type": "object",
      "required": [
        "reviewer_id"
      ],
      "properties": {
        "reviewer_id": {
          "type": "string",
          "description": "UUID of the reviewer."
        }
      }
    }
    arguments 12 lines
  • delete_skill unknown never probed

    Delete a skill you own. Routines that reference it keep working but their skill_id becomes null.

    mcp-tool

    {
      "type": "object",
      "required": [
        "skill_id"
      ],
      "properties": {
        "skill_id": {
          "type": "string",
          "description": "UUID of the skill."
        }
      }
    }
    arguments 12 lines
  • disconnect_integration unknown never probed

    Remove a connected integration by id.

    mcp-tool

    {
      "type": "object",
      "required": [
        "integration_id"
      ],
      "properties": {
        "integration_id": {
          "type": "string",
          "description": "UUID from list_integrations."
        }
      }
    }
    arguments 12 lines
  • list_notifications unknown never probed

    List your notification subscriptions. Each one POSTs report events (revision.created, comment.created, comment.mentioned, signoff.submitted) to a webhook formatted for Slack, Discord, or plain JSON.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • read_website unknown never probed

    Fetch a website by id: metadata plus its production deployment and live URL. Requires view permission.

    mcp-tool

    {
      "type": "object",
      "required": [
        "website_id"
      ],
      "properties": {
        "website_id": {
          "type": "string",
          "description": "UUID of the website."
        }
      }
    }
    arguments 12 lines
  • set_website_comment_status unknown never probed

    Resolve or reopen a website comment. Use this to close out issues as you ship fixes.

    mcp-tool

    {
      "type": "object",
      "required": [
        "comment_id",
        "status"
      ],
      "properties": {
        "status": {
          "enum": [
            "open",
            "resolved"
          ],
          "type": "string"
        },
        "comment_id": {
          "type": "string",
          "description": "UUID of the website comment."
        }
      }
    }
    arguments 20 lines
  • deploy_website unknown never probed

    Deploy source files to a website. Provide the full source bundle as files:[{path, content}] (UTF-8 text; max 2000 files / 25 MB). The provider builds + hosts it; poll read_website for the live URL. Sites are taken down after their TTL — redeploy to bring one back.

    mcp-tool

    {
      "type": "object",
      "required": [
        "website_id",
        "files"
      ],
      "properties": {
        "files": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "path",
              "content"
            ],
            "properties": {
              "path": {
                "type": "string",
                "description": "POSIX path, e.g. 'src/App.tsx'."
              },
              "content": {
                "type": "string",
                "description": "UTF-8 file contents."
              }
            }
          },
          "description": "Source files relative to the project root."
        },
        "website_id": {
          "type": "string",
          "description": "UUID of the website to deploy."
        }
      }
    }
    arguments 34 lines
  • create_report unknown never probed

    Upload a new HTML report to Comma and get back an absolute share_url to give the user. By default anyone with the link can open the report (visibility='public'; share links are not indexed by search engines) and comment on it after a free sign-in (public_permission='comment'). Pass visibility='private' to keep it owner-only, or public_permission='view' for a read-only link. To include images or other files the HTML references by relative path (e.g. `<img src="images/chart.png">`), pass them in `assets` — they're uploaded and the HTML's relative refs are rewritten to public URLs automatically, all in this one call. Returns the report id, visibility, public_permission, and absolute edit_url (/r/:id) and share_url (/p/:id). Pass producer_name (e.g. 'Claude Code', 'Cursor') so the public share view can attribute the report to the agent that produced it. Only pass source_recipe.prompt when the user asks; it is shown to every viewer.

    mcp-tool

    {
      "type": "object",
      "required": [
        "html"
      ],
      "properties": {
        "html": {
          "type": "string",
          "description": "Full HTML for the report (≤ 5 MB)."
        },
        "title": {
          "type": "string",
          "description": "Optional title. Defaults to 'Untitled report'."
        },
        "assets": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "relative_path",
              "content_base64"
            ],
            "properties": {
              "content_type": {
                "type": "string",
                "description": "Optional MIME type (e.g. 'image/png'). Defaults to 'application/octet-stream'."
              },
              "relative_path": {
                "type": "string",
                "description": "Path the HTML references it by, relative to the report (e.g. 'images/chart.png'). No leading slash, no '.'/'..' segments, no '%', '?' or '#'. Max 512 chars."
              },
              "content_base64": {
                "type": "string",
                "description": "Asset bytes as base64. A `data:<mime>;base64,…` data URL is also accepted. Max 25 MB decoded."
              }
            }
          },
          "description": "Optional inline assets (images, fonts, CSS, JS, …) the HTML references by *relative* path. Each is uploaded and the report's matching relative refs (src/href/srcset/url(...)) are rewritten to the stored public URLs — so you can pass HTML containing `<img src=\"images/chart.png\">` plus that asset in a single call instead of creating the report, uploading, and patching the HTML yourself. Re-uploading the same relative_path replaces it."
        },
        "visibility": {
          "enum": [
            "private",
            "registered",
            "public"
          ],
          "type": "string",
          "description": "Who can reach the share link. Defaults to 'public' (anyone with the link). 'registered' = any signed-in user; 'private' = owner only. For 'team' or 'domain' (company email, with allowed_email_domains) audiences, create then call set_report_sharing."
        },
        "description": {
          "type": "string",
          "description": "Optional one-line description."
        },
        "producer_url": {
          "type": "string",
          "description": "Optional http(s) URL the watermark chip links to (e.g. https://claude.ai/code)."
        },
        "producer_name": {
          "type": "string",
          "description": "Display name of the agent that produced this report (e.g. 'Claude Code', 'Cursor', 'ChatGPT'). Surfaced as a watermark chip on /p/:id."
        },
        "source_recipe": {
          "type": "object",
          "properties": {
            "tools": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Optional list of tool names the recipe used."
            },
            "prompt": {
              "type": "string",
              "description": "The prompt that produced this report, ready to deep-link into an agent."
            }
          },
          "description": "Structured payload (prompt + tools, etc.) the public viewer can use to re-run the same recipe on their own data. Convention: { prompt: string, tools?: string[] }. Shown to every viewer of the share link — only pass it when the user asks."
        },
        "producer_icon_url": {
          "type": "string",
          "description": "Optional http(s) URL to a small square icon for the producer."
        },
        "public_permission": {
          "enum": [
            "none",
            "view",
            "comment",
            "edit"
          ],
          "type": "string",
          "description": "What link/anonymous visitors may do. Defaults to 'comment' (commenting needs a free sign-in). 'edit' needs a token with the 'sharing' scope. Ignored (forced to 'none') when visibility='private'."
        }
      }
    }
    arguments 93 lines
  • create_report_from_url unknown never probed

    Import a public web page into Comma as a report. Fetches the URL and inlines its images, styles and fonts into a single self-contained HTML document — JavaScript-rendered pages (SPAs, app-builder pages like base44, dashboards) are rendered in a headless browser first so their real content is captured. Creates a shareable report and returns its id, edit URL (/r/:id) and share URL (/p/:id). Use for requests like 'import this page/site/dashboard/app into Comma' or 'turn this URL into a Comma doc'. The page must be publicly reachable (no login); pages behind bot-protection (e.g. Cloudflare challenges) can't be captured.

    mcp-tool

    {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "Public http(s) URL of the page to import."
        },
        "title": {
          "type": "string",
          "description": "Optional title. Defaults to the page's <title> (or hostname)."
        },
        "visibility": {
          "enum": [
            "private",
            "registered",
            "public"
          ],
          "type": "string",
          "description": "Who can reach the share link. Defaults to 'public'."
        },
        "public_permission": {
          "enum": [
            "none",
            "view",
            "comment",
            "edit"
          ],
          "type": "string",
          "description": "What link visitors may do. Defaults to 'comment'. 'edit' needs a token with the 'sharing' scope."
        }
      }
    }
    arguments 35 lines
  • list_reports unknown never probed

    List reports the authenticated user owns, most-recently-updated first. Returns id, title, description, timestamps, and share/edit URLs — not the HTML. Use get_report to fetch a report's body.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Defaults to 25. Capped at 100."
        },
        "cursor": {
          "type": "string",
          "description": "Pass the nextCursor returned by a previous call to paginate."
        }
      }
    }
    arguments 15 lines
  • get_report unknown never probed

    Fetch a report by id. Returns metadata + the stored HTML. Requires view permission.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Report id (UUID)."
        }
      }
    }
    arguments 12 lines
  • update_report unknown never probed

    Edit a report's title, description, HTML, and/or producer attribution in place. At least one mutable field must be provided.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Report id (UUID)."
        },
        "html": {
          "type": "string",
          "description": "Replacement HTML (≤ 5 MB)."
        },
        "title": {
          "type": "string"
        },
        "description": {
          "type": [
            "string",
            "null"
          ],
          "description": "Pass null to clear the description."
        },
        "producer_url": {
          "type": [
            "string",
            "null"
          ],
          "description": "http(s) URL the watermark chip links to. Pass null to clear."
        },
        "producer_name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Display name of the producing agent. Pass null to clear."
        },
        "source_recipe": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "tools": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "prompt": {
              "type": "string"
            }
          },
          "description": "Structured recipe payload ({ prompt, tools?, ... }) consumed by the public viewer's 'Continue this run' modal. Pass null to clear."
        },
        "producer_icon_url": {
          "type": [
            "string",
            "null"
          ],
          "description": "http(s) URL to a small producer icon. Pass null to clear."
        }
      }
    }
    arguments 65 lines
  • add_comment unknown never probed

    Create a top-level comment on a report. Optionally anchor it to a text excerpt or block id.

    mcp-tool

    {
      "type": "object",
      "required": [
        "report_id",
        "body"
      ],
      "properties": {
        "body": {
          "type": "string",
          "description": "Comment text."
        },
        "block_id": {
          "type": "string",
          "description": "Stable block identifier in the rendered HTML."
        },
        "report_id": {
          "type": "string",
          "description": "Report id (UUID)."
        },
        "anchor_text": {
          "type": "string",
          "description": "Quoted text the comment is anchored to."
        },
        "anchor_prefix": {
          "type": "string",
          "description": "Text before anchor_text (for disambiguation)."
        },
        "anchor_suffix": {
          "type": "string",
          "description": "Text after anchor_text (for disambiguation)."
        }
      }
    }
    arguments 33 lines
  • reply_to_comment unknown never probed

    Reply to an existing comment thread.

    mcp-tool

    {
      "type": "object",
      "required": [
        "comment_id",
        "body"
      ],
      "properties": {
        "body": {
          "type": "string",
          "description": "Reply text."
        },
        "comment_id": {
          "type": "string",
          "description": "Parent comment id (UUID)."
        }
      }
    }
    arguments 17 lines
  • set_comment_status unknown never probed

    Resolve or reopen a comment thread.

    mcp-tool

    {
      "type": "object",
      "required": [
        "comment_id",
        "status"
      ],
      "properties": {
        "status": {
          "enum": [
            "open",
            "resolved"
          ],
          "type": "string"
        },
        "comment_id": {
          "type": "string",
          "description": "Comment id (UUID)."
        }
      }
    }
    arguments 20 lines
  • get_report_signoffs unknown never probed

    List review verdicts (approved / changes_requested) on a report. Each entry carries the reviewer, optional note, and is_stale — true when the report's content has changed since the verdict was given. Check this before promoting or distributing a report: an approval with is_stale=true does not vouch for the current content.

    mcp-tool

    {
      "type": "object",
      "required": [
        "report_id"
      ],
      "properties": {
        "report_id": {
          "type": "string",
          "description": "Report id (UUID)."
        }
      }
    }
    arguments 12 lines
  • search_reports unknown never probed

    Trigram text search over reports the caller owns, was invited to, or shares with their team (not other people's public share links). Returns id, title, snippet, share URL and similarity. Use before drafting a new report to find prior work.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 20,
          "minimum": 1,
          "description": "Max results. Defaults to 5, capped at 20."
        },
        "query": {
          "type": "string",
          "description": "Free-text query (1+ chars)."
        },
        "include_html": {
          "type": "boolean",
          "description": "If true, include rendered_html for up to the top 3 results (bounded to keep responses small)."
        }
      }
    }
    arguments 22 lines
  • read_report unknown never probed

    Fetch a report by id, optionally as plain text. Returns id, title, description, URL, html and text. Use to read another agent's prior report as context.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Report id (UUID)."
        },
        "format": {
          "enum": [
            "html",
            "text"
          ],
          "type": "string",
          "description": "Which content shape to emphasize. Both are always returned."
        }
      }
    }
    arguments 20 lines
  • request_review unknown never probed

    Run every enabled agent-reviewer for a report against its current head revision. Returns the per-reviewer outcome (ok, comments_created, error?). Use when you've shipped a new revision and want a second agent to leave anchored critique before a human looks at it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "report_id"
      ],
      "properties": {
        "report_id": {
          "type": "string",
          "description": "Report id (UUID)."
        },
        "reviewer_id": {
          "type": "string",
          "description": "Optional: run a single reviewer by id. When omitted, runs every enabled reviewer the actor owns for this report."
        }
      }
    }
    arguments 16 lines
  • upload_report_asset unknown never probed

    Attach a binary asset (image, video, font, CSS, JS, etc.) to a report. The returned `url` is a stable public link suitable for `<img src>`, `<video src>`, CSS `url(...)`, or any other reference inside the report's HTML. Pass `content_base64` as raw base64 (or a `data:<mime>;base64,...` URL — both work). Re-uploading the same `relative_path` replaces the previous asset.

    mcp-tool

    {
      "type": "object",
      "required": [
        "report_id",
        "relative_path",
        "content_base64"
      ],
      "properties": {
        "report_id": {
          "type": "string",
          "description": "UUID of the target report. You must have edit permission on it."
        },
        "content_type": {
          "type": "string",
          "description": "Optional MIME type (e.g. 'image/png', 'video/mp4'). Defaults to 'application/octet-stream' if omitted."
        },
        "relative_path": {
          "type": "string",
          "description": "Path the asset will be addressable by, relative to the report (e.g. 'images/hero.png', 'fonts/inter.woff2'). No leading slash, no '.'/'..' segments, no '%', '?' or '#'. Max 512 chars."
        },
        "content_base64": {
          "type": "string",
          "description": "Asset bytes as base64. A `data:<mime>;base64,...` data URL is also accepted — the prefix is stripped automatically. Max 25 MB decoded."
        }
      }
    }
    arguments 26 lines
  • list_report_assets unknown never probed

    List all assets attached to a report, with their public URLs. Useful for discovering what's already uploaded before deciding whether to add more or reference existing files.

    mcp-tool

    {
      "type": "object",
      "required": [
        "report_id"
      ],
      "properties": {
        "report_id": {
          "type": "string",
          "description": "UUID of the report."
        }
      }
    }
    arguments 12 lines
  • update_reviewer unknown never probed

    Update an agent-reviewer you own. Pass any subset of name, reviewer_url, reviewer_auth_header (null clears), prompt (null clears), enabled, auto_on_revision.

    mcp-tool

    {
      "type": "object",
      "required": [
        "reviewer_id"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "prompt": {
          "type": [
            "string",
            "null"
          ]
        },
        "enabled": {
          "type": "boolean"
        },
        "reviewer_id": {
          "type": "string",
          "description": "UUID of the reviewer."
        },
        "reviewer_url": {
          "type": "string"
        },
        "auto_on_revision": {
          "type": "boolean"
        },
        "reviewer_auth_header": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    }
    arguments 36 lines
  • create_routine unknown never probed

    Create a routine that re-runs on a cron schedule against a report you can edit. Provide either `trigger_url` (Comma POSTs to your webhook each tick) or `skill_id` (Comma runs one of your skills). `schedule_cron` is a standard 5-field cron expression; routines run at any cadence on every plan, with no per-plan routine cap. Hosted runs draw down your prepaid credit balance (or run free on your own AWS Bedrock key).

    mcp-tool

    {
      "type": "object",
      "required": [
        "report_id",
        "schedule_cron"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Defaults to 'Untitled routine'."
        },
        "enabled": {
          "type": "boolean",
          "description": "Defaults to true."
        },
        "payload": {
          "type": "object",
          "description": "Optional JSON forwarded to trigger_url (≤ 8 KiB)."
        },
        "skill_id": {
          "type": "string",
          "description": "UUID of a skill to run each tick (or use trigger_url)."
        },
        "report_id": {
          "type": "string",
          "description": "UUID of the report this routine maintains."
        },
        "trigger_url": {
          "type": "string",
          "description": "Webhook Comma POSTs each tick (or use skill_id)."
        },
        "connector_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional connector UUIDs the skill may use. Must be owned by you."
        },
        "schedule_cron": {
          "type": "string",
          "description": "5-field cron expression, e.g. '0 9 * * 1'."
        },
        "trigger_auth_header": {
          "type": "string",
          "description": "Optional Authorization header sent to trigger_url. Stored encrypted."
        }
      }
    }
    arguments 48 lines
  • update_routine unknown never probed

    Update a routine you own. Pass any subset of name, schedule_cron, trigger_url (null clears), trigger_auth_header (null clears), skill_id (null clears), connector_ids, payload, enabled. Changing schedule_cron recomputes the next run time and is re-checked against your plan floor.

    mcp-tool

    {
      "type": "object",
      "required": [
        "routine_id"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        },
        "payload": {
          "type": [
            "object",
            "null"
          ]
        },
        "skill_id": {
          "type": [
            "string",
            "null"
          ]
        },
        "routine_id": {
          "type": "string",
          "description": "UUID of the routine."
        },
        "trigger_url": {
          "type": [
            "string",
            "null"
          ]
        },
        "connector_ids": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "schedule_cron": {
          "type": "string"
        },
        "trigger_auth_header": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    }
    arguments 51 lines
  • delete_routine unknown never probed

    Delete a routine you own and its run history.

    mcp-tool

    {
      "type": "object",
      "required": [
        "routine_id"
      ],
      "properties": {
        "routine_id": {
          "type": "string",
          "description": "UUID of the routine."
        }
      }
    }
    arguments 12 lines
  • run_routine unknown never probed

    Execute a routine immediately, without waiting for its next scheduled tick. Returns the run outcome plus the refreshed routine row (last_run_status, next_run_at, …). Skill-driven routines may run asynchronously (deferred); poll list_routines for the final status.

    mcp-tool

    {
      "type": "object",
      "required": [
        "routine_id"
      ],
      "properties": {
        "routine_id": {
          "type": "string",
          "description": "UUID of the routine."
        }
      }
    }
    arguments 12 lines
  • list_skills unknown never probed

    List the skills you own. A skill is a reusable prompt/recipe a routine can run inside Comma. Returns the prompt, required tools, source, and model for each.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • create_skill unknown never probed

    Create a skill, either by authoring a new one (pass `name` + `prompt`) or by uploading a SKILL.md you already have (pass its full text as `skill_md` — its YAML frontmatter is parsed for name/description/prompt/required tools/model). The skill can then be attached to a routine (via create_routine's skill_id) so Comma runs it on a schedule. For .zip-bundle or GitHub-sourced skills, use the REST endpoint POST /api/v1/skills.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Skill name. Required unless skill_md is provided."
        },
        "model": {
          "type": "string",
          "description": "Optional model override for the skill run."
        },
        "prompt": {
          "type": "string",
          "description": "The instructions/recipe the skill runs (≤ 100k chars). Required unless skill_md is provided."
        },
        "skill_md": {
          "type": "string",
          "description": "Full text of an existing SKILL.md (with YAML frontmatter). Use this to upload a skill you already have. `name`/`description`/etc. below override the parsed values."
        },
        "description": {
          "type": "string",
          "description": "Optional one-line description."
        },
        "required_tools": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string"
              }
            }
          },
          "description": "Optional list of tools the skill needs, e.g. [{ kind: 'connector' }]."
        }
      }
    }
    arguments 40 lines
  • list_integrations unknown never probed

    List your connected GitHub / Linear integrations. Access tokens are never returned — only provider, account label, and status.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • connect_integration unknown never probed

    Connect a GitHub PAT or Linear API key so Comma can post report links onto PRs/issues. The token is verified against the provider, then stored encrypted; the token itself is never returned. Re-connecting the same provider rotates the stored token.

    mcp-tool

    {
      "type": "object",
      "required": [
        "provider",
        "access_token"
      ],
      "properties": {
        "provider": {
          "enum": [
            "github",
            "linear"
          ],
          "type": "string",
          "description": "Which provider to connect."
        },
        "access_token": {
          "type": "string",
          "description": "The GitHub PAT or Linear API key."
        },
        "account_label": {
          "type": "string",
          "description": "Optional label. Derived from the provider account if omitted."
        }
      }
    }
    arguments 25 lines
  • list_connectors unknown never probed

    List your connectors (encrypted credentials for tools like PostHog, Databricks, Supabase, Slack, Stripe, Google Drive) plus the catalog of connector kinds and their config/secret schemas. Secrets are never returned.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • create_connector unknown never probed

    Create a connector: an encrypted credential a skill can use. `kind` must be one of the catalog kinds from list_connectors; `config` and `secret` are validated against that kind's schema. The secret is encrypted at rest and never returned. (kind, label) must be unique per account.

    mcp-tool

    {
      "type": "object",
      "required": [
        "kind",
        "label",
        "secret"
      ],
      "properties": {
        "kind": {
          "type": "string",
          "description": "Connector kind (see list_connectors definitions)."
        },
        "label": {
          "type": "string",
          "description": "A name for this credential, unique within the kind."
        },
        "config": {
          "type": "object",
          "description": "Non-secret config keyed by the kind's configSchema."
        },
        "secret": {
          "type": "object",
          "description": "Secret values keyed by the kind's secretSchema. Encrypted at rest."
        }
      }
    }
    arguments 26 lines
  • delete_connector unknown never probed

    Delete a connector you own. Routines referencing it keep their other connectors.

    mcp-tool

    {
      "type": "object",
      "required": [
        "connector_id"
      ],
      "properties": {
        "connector_id": {
          "type": "string",
          "description": "UUID of the connector."
        }
      }
    }
    arguments 12 lines
  • create_notification unknown never probed

    Subscribe a webhook to report events. Omit report_id to subscribe to every report you own, were invited to, or share with your team (public link access doesn't count). `events` defaults to all three; `format` is 'slack' (default), 'discord', or 'plain'.

    mcp-tool

    {
      "type": "object",
      "required": [
        "webhook_url"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Defaults to 'Untitled notification'."
        },
        "events": {
          "type": "array",
          "items": {
            "enum": [
              "revision.created",
              "comment.created",
              "comment.mentioned",
              "signoff.submitted"
            ],
            "type": "string"
          },
          "description": "Which events to deliver. Defaults to all three."
        },
        "format": {
          "enum": [
            "slack",
            "discord",
            "plain"
          ],
          "type": "string",
          "description": "Payload format. Defaults to 'slack'."
        },
        "report_id": {
          "type": "string",
          "description": "Scope to one report, or omit for every report you own, were invited to, or share with your team."
        },
        "webhook_url": {
          "type": "string",
          "description": "http(s) URL Comma POSTs events to."
        },
        "signing_secret": {
          "type": "string",
          "description": "Optional secret used to sign deliveries. Stored encrypted."
        }
      }
    }
    arguments 46 lines
  • delete_notification unknown never probed

    Remove a notification subscription by id.

    mcp-tool

    {
      "type": "object",
      "required": [
        "subscription_id"
      ],
      "properties": {
        "subscription_id": {
          "type": "string",
          "description": "UUID from list_notifications."
        }
      }
    }
    arguments 12 lines
  • list_websites unknown never probed

    List the authenticated user's websites, most-recently-updated first. Returns id, name, framework, visibility, and the app URL (/websites/:id) — use read_website for the live URL and production deployment.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Defaults to 25."
        },
        "cursor": {
          "type": "string",
          "description": "nextCursor from a previous call."
        }
      }
    }
    arguments 15 lines
  • list_website_comments unknown never probed

    List comments left on a website, with the full hidden enrichment a coding agent needs to fix each issue: page_path (the route), target_selector (the element), deployment_id (the build), and a metadata blob (element purpose, a DOM slice, viewport, recent console messages). Defaults to open comments; pass status:'all' to include resolved.

    mcp-tool

    {
      "type": "object",
      "required": [
        "website_id"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 200,
          "minimum": 1,
          "description": "Defaults to 50."
        },
        "cursor": {
          "type": "string",
          "description": "nextCursor from a previous call."
        },
        "status": {
          "enum": [
            "open",
            "all"
          ],
          "type": "string",
          "description": "Defaults to 'open'."
        },
        "website_id": {
          "type": "string",
          "description": "UUID of the website."
        }
      }
    }
    arguments 30 lines
  • create_website unknown never probed

    Create a new website. Either a deploy target (then call deploy_website to push source), or pass external_url to link an EXISTING live site (embed + page-level comments, no deploy). framework is react|nextjs|vite|static (defaults to react).

    mcp-tool

    {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Display name. Defaults to 'Untitled site'."
        },
        "framework": {
          "enum": [
            "react",
            "nextjs",
            "vite",
            "static"
          ],
          "type": "string",
          "description": "Build framework (for deploy targets). Defaults to 'react'."
        },
        "description": {
          "type": "string"
        },
        "external_url": {
          "type": "string",
          "description": "Link an existing live site by URL instead of deploying. Embeds it for page-level comments; no build."
        }
      }
    }
    arguments 26 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id cf3354cc32f9c082.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/cf3354cc32f9c082/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/cf3354cc32f9c082/badge.svg)](https://brick.blue/agent/cf3354cc32f9c082?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.