Corbah: open line for agents
by corbah.com · remote · no sign-in to list tools · v0.5.0 · published by com.corbah
Talk to cycling brand Corbah, get team kit quotes, commission designs, browse the catalog.
11 tools: 2 do something that can't be undone, 5 change things and 4 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone2Claude Code: ask: see these tools
- Changes things5Claude Code: ask: see these tools
- Only reads4Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http open-line https://corbah-agents.corbah.workers.dev/mcpFindings
Matches of fixed checks, with the text they matched.
- Warncheck_reply
The server marks "check_reply" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "check_reply" says "reply": a word for sending, and what is sent cannot be taken back.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
11 tools
Can't be undone 2Claude Code: ask
check_replyCheck whether Jon has answered a message or commission you sent.Can send data out1 finding
Why it is in this group
- The name "check_reply" says "reply": a word for sending, and what is sent cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- outboundThe name "check_reply" says "reply": it sends or publishes something to other people.
Findings
- Warn
The server marks "check_reply" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "check_reply" says "reply": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it Check whether Jon has answered a message or commission you sent. Use the reference and token you got back.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
send_messageSend anything to Jon, the founder of Corbah: a question, idea, request, proposal or note.Can send data outNo findings
Why it is in this group
- The name "send_message" says "send": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "send_message" says "send": it sends or publishes something to other people.
- outboundThe input takes a URL (input.callback_url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Send anything to Jon, the founder of Corbah: a question, idea, request, proposal or note. No format required. Returns a reference and a private reply link.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Changes things 5Claude Code: ask
ask_corbahTalk to Corbah's agent: ask about the brand, designs, sizing, made-to-order timing, custom kit, or think through an idea together.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Talk to Corbah's agent: ask about the brand, designs, sizing, made-to-order timing, custom kit, or think through an idea together. It answers right away. For anything Jon needs to act on, use send_message or commission_design.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
commission_designAsk Corbah to design custom cycling kit: for a club, team, event, ride, person or idea.Can send data outNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
What it can reach
- outboundThe input takes a URL (input.callback_url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Ask Corbah to design custom cycling kit: for a club, team, event, ride, person or idea. Describe what you want in any detail you have. Jon reviews it and replies with a proof or quote on your private reply link. Nothing is charged by this call.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
quote_team_kitPlan and price custom kit for a club or team: riders, pieces, optional size split and the date it's needed.Can send data outNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
What it can reach
- outboundThe input takes a URL (input.callback_url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Plan and price custom kit for a club or team: riders, pieces, optional size split and the date it's needed. Returns an instant order summary, an estimate that is at most Corbah's current store prices (team pricing is quoted by Jon and is often lower), the date artwork must be approved by, and next steps. Set send=true to send the request to Corbah for a real quote; otherwise nothing is sent.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
subscribe_updatesGet notified when Corbah releases new products.Can send data outNo findings
Why it is in this group
- The name "subscribe_updates" says "subscribe": a word for a change.
What it can reach
- outboundThe input takes a URL (input.callback_url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Get notified when Corbah releases new products. Give an https callback URL; Corbah POSTs a JSON event to it. Returns a token to unsubscribe.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
unsubscribe_updatesStop update notifications, using the token from subscribe_updates.No findings
Why it is in this group
- The name "unsubscribe_updates" says "unsubscribe": a word for a change.
Description, as the server wrote it Stop update notifications, using the token from subscribe_updates.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 4Claude Code: allow
about_corbahRead what this line is, what Jon would like to hear about, and where Corbah's store data lives.No findings
Why it is in this group
- The description's first verb is "read": a word for reading.
Description, as the server wrote it Read what this line is, what Jon would like to hear about, and where Corbah's store data lives.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
browse_catalogSearch Corbah's live catalog of cycling jerseys, bib shorts, skinsuits and accessories.Reads text others writeNo findings
Why it is in this group
- The name "browse_catalog" says "browse": a word for reading.
What it can reach
- untrusted-inputThe name "browse_catalog" says "browse": it reads web pages, which anyone can write.
Description, as the server wrote it Search Corbah's live catalog of cycling jerseys, bib shorts, skinsuits and accessories. All filters optional. Returns titles, prices (USD), sizes in stock, short descriptions, images and product URLs.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_productFull details for one product by handle: description, every size and price, availability, images, collections and ordering notes.Reads private dataNo findings
Why it is in this group
- The name "get_product" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "note": it reads notes.
Description, as the server wrote it Full details for one product by handle: description, every size and price, availability, images, collections and ordering notes.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_collectionsCorbah's collections and design series (e.g.No findings
Why it is in this group
- The name "list_collections" says "list": a word for reading.
Description, as the server wrote it Corbah's collections and design series (e.g. Weekend Warrior, Classics, World Lines) with descriptions and how many products are available in each.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
5 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 untrusted-input tool breaks every one.
- Reads private data1
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write1
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out5
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__open-line__browse_catalog"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Remote posture
What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.
Looked at Oct 22, 2026, 14:29 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.
- Reachable
- yes
- HTTP status of an anonymous initialize
- 200
- tools/list served without credentials
- yes
- Tools that change things, listed without credentials
- 7
- Protocol version
- 2025-06-18
- WWW-Authenticate on 401
- not observed
- resource_metadata in WWW-Authenticate
- none
- RFC 9728 protected resource metadata
- none
- Authorization servers
- none
- Legacy HTTP+SSE transport
- no
- Dynamic client registration
- not observed
- Client ID metadata documents
- not observed
- HighThe whole server
The endpoint served tools/list without credentials, and the list has 7 tools that change things (2 irreversible, 5 write). Whether a call also works without credentials was not tested: tools are never called.
What this check looks forMatched text
https://corbah-agents.corbah.workers.dev/mcp: tools/list returned 11 tools to an anonymous client, including send_message (irreversible), check_reply (irreversible), ask_corbah (write), commission_design (write), quote_team_kit (write) and 2 more
Install
Pinned to version 0.5.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http open-line https://corbah-agents.corbah.workers.dev/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__open-line__browse_catalog",
"mcp__open-line__get_product",
"mcp__open-line__list_collections",
"mcp__open-line__about_corbah"
],
"ask": [
"mcp__open-line__ask_corbah",
"mcp__open-line__commission_design",
"mcp__open-line__quote_team_kit",
"mcp__open-line__send_message",
"mcp__open-line__check_reply",
"mcp__open-line__subscribe_updates",
"mcp__open-line__unsubscribe_updates"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as open-line. Review it before you use it.
Capability tags behind 7 rules
- mcp__open-line__commission_design outbound
- mcp__open-line__quote_team_kit outbound
- mcp__open-line__send_message outbound
- mcp__open-line__check_reply outbound
- mcp__open-line__browse_catalog untrusted-input
- mcp__open-line__get_product private-data
- mcp__open-line__subscribe_updates outbound