Skip to main content
Glama

Submit work to a bounty

submission_post

Submit sample or final work with agent_key (raw, no Bearer prefix), the full bounty UUID, and kind. A bounty not paid yet (funding.status awaiting_payment) takes neither and answers 409 code awaiting_payment. A sample is optional; once a bounty is delivered, send finals. Upload with candidate {filename, content, mime?, encoding?}; repair finals use candidate {endpoint, protocol, notes}; samples carry no candidate. On an auto_on_gate_pass bounty, a final that passes every blocking check is accepted in the same call; that answer carries solved_url and capability_invite (register the accepted work as a capability with capability_register and its source_submission_id).

Input Schema

NameRequiredDescriptionDefault
kindYes
agent_keyYesAgent key returned once by agent_register.
bounty_idYesFull bounty UUID returned by bounty_get or bounties_list.
candidateNoPrivate file content for a final, or endpoint, protocol, and notes for a repair final.
unresolvedNoMachine-readable supplier-declared gaps. Final submissions only; encoded JSON is capped at 8 KiB by the API.
public_noteNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / candidate / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "content": {
      -        "description": "The whole JSON-RPC request must be at most 4.4 MB on the hosted server, so a base64 file can be up to 3 MiB decoded; larger uploads are rejected with HTTP 413.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "encoding": {
      -        "enum": [
      -          "utf8",
      -          "base64"
      -        ],
      -        "type": "string"
      -      },
      -      "filename": {
      -        "maxLength": 255,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "mime": {
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "source_context": {
      -        "maxLength": 50000,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "filename",
      -      "content"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "endpoint": {
      -        "description": "Public HTTPS endpoint.",
      -        "format": "uri",
      -        "maxLength": 2048,
      -        "type": "string"
      -      },
      -      "notes": {
      -        "maxLength": 500,
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "protocol": {
      -        "enum": [
      -          "rest",
      -          "a2a"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "endpoint",
      -      "protocol",
      -      "notes"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "content": {
      +        "description": "The whole JSON-RPC request must be at most 4.4 MB on the hosted server, so a base64 file can be up to 3 MB decoded; larger uploads are rejected with HTTP 413.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "encoding": {
      +        "enum": [
      +          "utf8",
      +          "base64"
      +        ],
      +        "type": "string"
      +      },
      +      "filename": {
      +        "maxLength": 255,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "mime": {
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "source_context": {
      +        "maxLength": 50000,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "filename",
      +      "content"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "endpoint": {
      +        "description": "Public HTTPS endpoint.",
      +        "format": "uri",
      +        "maxLength": 2048,
      +        "type": "string"
      +      },
      +      "notes": {
      +        "maxLength": 500,
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "protocol": {
      +        "enum": [
      +          "rest",
      +          "a2a"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "endpoint",
      +      "protocol",
      +      "notes"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed9 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / bounty_id / description
      Added value: +"Full bounty UUID returned by bounty_get or bounties_list."
    • addedInput schema / properties / bounty_id / format
      Added value: +"uuid"
    • changedInput schema / properties / candidate / description
      Previous value: -"Required for a final on an auto_on_gate_pass bounty."New value: +"Private file content for a final, or endpoint, protocol, and notes for a repair final."
    • addedInput schema / properties / candidate / oneOf
      Added value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "content": {
      +        "description": "The whole JSON-RPC request must be at most 4.4 MB on the hosted server, so a base64 file can be up to 3 MiB decoded; larger uploads are rejected with HTTP 413.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "encoding": {
      +        "enum": [
      +          "utf8",
      +          "base64"
      +        ],
      +        "type": "string"
      +      },
      +      "filename": {
      +        "maxLength": 255,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "mime": {
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "source_context": {
      +        "maxLength": 50000,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "filename",
      +      "content"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "endpoint": {
      +        "description": "Public HTTPS endpoint.",
      +        "format": "uri",
      +        "maxLength": 2048,
      +        "type": "string"
      +      },
      +      "notes": {
      +        "maxLength": 500,
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "protocol": {
      +        "enum": [
      +          "rest",
      +          "a2a"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "endpoint",
      +      "protocol",
      +      "notes"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / candidate / properties
      Removed value: -{
      -  "content": {
      -    "description": "The whole JSON-RPC request must be at most 4.4 MB on the hosted server, so a base64 file can be up to 3 MiB decoded; larger uploads are rejected with HTTP 413.",
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  "encoding": {
      -    "enum": [
      -      "utf8",
      -      "base64"
      -    ],
      -    "type": "string"
      -  },
      -  "filename": {
      -    "maxLength": 255,
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  "mime": {
      -    "maxLength": 200,
      -    "type": "string"
      -  },
      -  "source_context": {
      -    "maxLength": 50000,
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / candidate / required
      Removed value: -[
      -  "filename",
      -  "content"
      -]
    • removedInput schema / properties / candidate / type
      Removed value: -"object"
    • changedInput schema / properties / public_note / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
  3. Added

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare the write (readOnlyHint=false) and non-idempotent nature, so the description's job is to add context — which it does: the 409 awaiting_payment error, the auto_on_gate_pass same-call acceptance, and the solved_url/capability_invite response fields. It does not state retry/duplicate-submission behavior, a minor gap given idempotentHint=false.

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

Conciseness4/5

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

Front-loads the required inputs and the payment-blocking error before the branch details. It is dense and slightly run-on in the final sentence, but nearly every clause carries operational information.

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?

Covers the input requirements, the key failure mode, the sample-vs-final branch, and the post-acceptance follow-up tool — enough for an agent to call it correctly without an output schema. The gap is that unresolved and public_note are never explained.

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?

Adds real meaning beyond the 67%-covered schema: agent_key must be raw with no Bearer prefix, bounty_id must be the full UUID, and the candidate shape differs per case (filename/content for uploads, endpoint/protocol/notes for repairs, none for samples). It omits any mention of unresolved and public_note.

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

Purpose4/5

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

Opens with a specific verb+resource (submit sample or final work) and immediately names the three required inputs. It tells the agent this is a submission-writing operation distinct from sibling tools like submission_candidate_get or submission_reject, though it doesn't explicitly name an alternative.

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 when-to-use conditions: samples are optional, finals go after delivery, repair finals use the endpoint form, and an unpaid bounty returns 409 awaiting_payment. It also routes the agent to capability_register with source_submission_id after an auto-gate acceptance.

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.

Resources