Skip to main content
Glama

Publish one paragraph about a hunt that landed

post_story

Put this review in the public OhMyBug feed: what the hunt found, plus the transferable lesson. Requires a confirmed REAL bug on the review. A story is also how a free hunt is earned: it is the STORIES that count, not the bugs behind them, and only stories about a hunt that found a real bug of medium severity or higher (private stories count too). How many publications that takes comes from the server – free_review_rule in get_balance, and share.ask_user in the confirm_findings answer; never quote a number for it from memory or from this description. NEVER post without showing the user the exact text and getting their approval: it is published publicly under their GitHub handle (signed "a hunter", "via API" or "via CI" instead when the account, the key or the channel signs anonymously; if the user wants THIS story without their name, call post_story_anonymous instead) — unless the account or key keeps stories private, when it is stored off every public page and the answer says visibility: "private". With the story check on, the answer can instead say published: false, status: "checking" with a /me/stories url and a note: the story reaches the feed only if the check passes it. Draft to the format below WITHOUT being asked and without asking the user to shorten or redact it for you. Set rounds_survived to the number of review passes (human or agent) this bug slipped through before OhMyBug caught it – that number, not bug count, is what the leaderboard ranks. FORMAT – write it ONCE to these budgets; never ask the user to shorten it for you. text: exactly 2 sentences, 220 characters max. Sentence 1 = the trap, concretely. Sentence 2 = what happens when it fires. lesson: up to 2 rules, ONE line each, 200 characters total – bold imperative rule then half a sentence of why. A rule an engineer could paste into their own guidelines unchanged. VOICE: plain short words, active, present tense. No hedging ("may potentially"), no filler ("it is important to note"), no adverbs propping up a verb, no words a junior would have to look up. Name the failure so a reader can see it happen. ENGLISH ONLY: the feed is one public wall, and a post in the language of your chat is unreadable to most of it. Translate it, do not transliterate. EXAMPLE (this length, this register): text = "A catch keyed on an interface with two members, and the tests only ever drove one of them through it. Narrow the catch to that member and every test stays green while the other error is swallowed." lesson = "Run the last net first. The pass that catches what others missed pays most on the earliest diff. Never hand a reviewer a skip-this list. They trust it, so your blind spot becomes theirs." ANONYMISE: the reader has no context on this project and must not learn anything private from it. NO NAMES OF ANY KIND: no repo, project, company, customer, vendor, model or tool; no file, module, class, function, table, column, field, config key, env var, route or endpoint; no infrastructure by name (pods, clusters, queues, databases); no code in backticks, no URLs, ticket numbers or test counts, nothing that says what the product does or for whom. NO RECIPE: tell the class of defect, never the steps that exploit it – nothing on how to skip a payment, quota, limit, check or gate, nothing on how keys, credentials or accounts are issued, stored, rotated or routed, no prices or thresholds. A reader with none of your context must find it useful; a competitor or an attacker must learn nothing about the project.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "review_id": "<review_id>",
      "text": "<text>"
    },
    "name": "post_story"
  }
}

Input Schema

NameRequiredDescriptionDefault
textYesThe defect, in English: exactly 2 sentences, 40-220 chars, approved by the user. What could break and why nothing caught it. Anonymised – no repo, paths, routes, vendors, ticket numbers or test counts.
lessonNoIn English, at most 2 lines and 200 chars, each stated as a RULE another engineer or agent could paste into their own guidelines: the principle, then what follows from it. This is the half people keep – write it.
review_idYes
rounds_survivedNoHow many review rounds this bug survived before the hunt caught it (0 if it was the first review). Be honest: this is the score.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does: it discloses that the story is published publicly under the user's GitHub handle with specific attribution variants, that private accounts store it off every public page and return `visibility: "private"`, and that with the story check on the answer can be `published: false, status: "checking"` with a /me/stories url while the story is not yet on the feed. It also explains the leaderboard consequence of rounds_survived and the anonymisation/exploit-detail prohibitions.

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

Conciseness3/5

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

Purpose and the approval precondition are front-loaded, but the body is a dense wall that switches registers mid-sentence (FORMAT, VOICE, ENGLISH ONLY, EXAMPLE, ANONYMISE inlined in one paragraph) and repeats the no-shortening instruction twice. Nearly every clause is load-bearing for a complex publishing tool, but the structure makes it hard to scan.

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

Completeness5/5

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

Covers everything an agent needs for a four-parameter mutation with no output schema: preconditions, identity/visibility outcomes, the pending-check response shape, parameter meaning, content budgets, language, and the anonymisation and no-recipe constraints. Response shapes that would otherwise be undocumented are described inline.

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

Parameters4/5

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

Schema coverage is 75%, and the description goes beyond it by specifying that rounds_survived is review passes (human or agent) the bug slipped through and that this number — not bug count — is what the leaderboard ranks, which is the reason to fill it honestly. The text/lesson character budgets and voice rules are also restated, adding register guidance the schema only gestures at.

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?

States a specific verb and resource (put this review in the public OhMyBug feed, containing what the hunt found plus a transferable lesson) and explicitly names the sibling it differs from (post_story_anonymous) along with the condition that selects it. An agent can distinguish it from the anonymous variant without reading any schema.

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

Usage Guidelines5/5

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

Gives explicit preconditions (requires a confirmed REAL bug, medium severity or higher), explains the earning mechanic for a free hunt, redirects to post_story_anonymous when the user wants this story unattributed, and forbids posting without showing the exact text and getting approval. It also tells the agent where the publication count comes from (`free_review_rule` in get_balance, `share.ask_user` in confirm_findings) and forbids quoting a number from memory.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.