GetABrainπ§ | Live Human-in-the-Loop MCP for AI Agents
The GetABrain MCP server gives AI agents real-time access to human judgment through 7 tools, enabling human-in-the-loop (HITL) workflows for tasks requiring subjective evaluation, content moderation, user studies, or any decision best made by a person.
get_balanceβ Check your prepaid balance (in cents), account mode (test/live), and auto-reload status.create_topup_linkβ Generate a Stripe Checkout URL to add funds (min $5); a human must open the link to complete payment.submit_queryβ Submit structured questions to real human workers across 16 formats (A/B test, yes/no, rating, ranking, sentiment analysis, image/video/audio review, voice/video/photo capture, etc.), with configurable bid amount, worker quality, and required response count. Returns aquery_idimmediately.get_responsesβ Fetch a query's current status and any responses submitted so far without waiting.wait_for_responsesβ Poll for responses for up to 50 seconds, returningreadywhen enough answers arrive orpendingif more time is needed.list_queriesβ List recent queries with optional status filtering (active, completed, failed) to track progress or recover query IDs.rate_responseβ Rate a worker's response 1β5 with optional feedback, improving future worker quality matching.
Test mode: Use a test-mode API key to simulate the full pipeline for free β no real workers, no charges, responses marked simulated: true.
Flexible deployment: Run locally via npx or use the hosted remote server at https://www.getabrain.ai/api/mcp with no local install required.
Allows creating a Stripe Checkout URL to add funds to the account via a human-completed payment.
@getabrain/mcp-server
MCP server for GetABrain.ai β give your AI agent real human judgment as native tools.
Use with Claude Desktop / Cursor
Add to your MCP client config (e.g. claude_desktop_config.json):
{
"mcpServers": {
"getabrain": {
"command": "npx",
"args": ["-y", "@getabrain/mcp-server"],
"env": {
"GETABRAIN_API_KEY": "gab_k_β¦",
"GETABRAIN_API_SECRET": "gab_s_β¦"
}
}
}
}Get your API key by signing up at https://getabrain.ai.
Related MCP server: humansurvey-mcp
Remote (hosted) MCP server -- no install
Prefer not to run anything locally? GetABrain also hosts this same server over Streamable HTTP at
https://www.getabrain.ai/api/mcp. Point any MCP client that supports remote servers at that URL and
pass your key pair as headers instead of env vars:
{
"mcpServers": {
"getabrain": {
"url": "https://www.getabrain.ai/api/mcp",
"headers": {
"X-API-Key": "gab_k_β¦",
"X-API-Secret": "gab_s_β¦"
}
}
}
}Same 7 tools, same schemas, same test-mode support -- see docs/deploy/remote-mcp.md in this repo for
details (Smithery-style clients, auth requirements, etc).
Test mode
Test mode is a flag on the key, not a different key format. When you mint an API key β via
POST /api/v1/requestor/keys with {"mode":"test"}, or by choosing "test" in the dashboard β you get
back a completely normal gab_k_β¦ / gab_s_β¦ key pair. There's no _test_ in the string; the
test-ness lives in the database as an is_test flag on that key. No funding or card required.
Point GETABRAIN_API_KEY / GETABRAIN_API_SECRET at a test-mode key and the server behaves identically, except:
submit_querynever touches your balance β no charge, noinsufficient_balanceerrors.Responses come back synthetic and are always marked
simulated: true, so your pipeline (submit β wait/poll β rate) can be built and exercised end-to-end before any real human worker or real money is involved.get_balancereportsmode: "test"so the agent/human can tell at a glance which environment it's in.
When you're ready to go live: mint a live-mode key (same call, {"mode":"live"} or the dashboard
default), fund the account with create_topup_link (works with either key type β a test-mode agent can
generate the link, a human completes checkout to add real funds), and swap the env vars. get_balance
then reports mode: "live", and submit_query starts spending real balance and dispatching to real paid
workers.
Tools
get_balanceβ read-only: prepaid balance (cents),mode("test"/"live"), andauto_reload_enabled(with a setup link + hint when it's off and would otherwise stall a live account at zero balance).create_topup_linkβ mints a Stripe Checkout URL to add funds (min $5); a human opens it in a browser to pay β the agent cannot complete payment itself.submit_queryβ ask real humans a question (16 query types: A/B test, rating, ranking, sentiment, yes/no, image/video/audio review, voice/video/photo capture, β¦). Returns aquery_id. Spends balance on a live key; free andsimulated: trueon a test key.get_responsesβ one-shot, read-only: current status + whatever responses exist right now, no waiting.wait_for_responsesβ bounded polling (up tomax_wait_seconds, default/max 50s); returnsreadywith responses once enough arrive, orpendingβ call again to keep waiting. Use this instead ofget_responseswhen you want the tool call itself to wait.list_queriesβ read-only: your recent queries, optionally filtered bystatus.rate_responseβ rate a worker's answer 1β5 (optionalfeedback_text); feeds the worker quality system.
Example agent flow
get_balanceβ confirm funds (ormode: "test"for a free sandbox run).If funds are short on a live key:
create_topup_linkβ human completes checkout βget_balanceagain.submit_queryβ getquery_id.wait_for_responses(repeat whilepending) β read the human (or simulated, in test mode) answers.rate_responseβ optionally rate each response to improve future worker matching.
Full API docs: https://getabrain.ai/docs/api
Available Tools
7 toolscreate_topup_linkA
Generate a one-time Stripe Checkout URL for adding funds to the prepaid balance. Use when get_balance shows insufficient funds for an upcoming submit_query, or a human asks to add money. Side effect: creates a pending Stripe session (no charge yet); the returned checkout_url must be OPENED IN A BROWSER BY A HUMAN to enter payment details and complete the charge -- the agent cannot complete payment itself; this is an out-of-band, human-in-the-loop step. Works with a test-mode or live-mode key (funding a test-mode account is how you move a sandbox integration to real spending power). Balance updates only after checkout completes; poll get_balance to confirm. Disambiguation: only mints a payment link -- never moves money or blocks waiting for payment itself.
| Name | Required | Description | Default |
|---|---|---|---|
| amount_cents | Yes | Amount to add to the prepaid balance, in whole cents (min 500 = $5.00, max 10000000 = $100,000.00). E.g. 5000 = $50.00. |
Output Schema
| Name | Required | Description |
|---|---|---|
| checkout_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses that it creates a pending Stripe session without charging, requires human to open URL in browser, agent cannot complete payment, and balance updates only after checkout completes. This is consistent with annotations (readOnlyHint=false, openWorldHint=true) and adds critical behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat lengthy but each sentence adds value. It is well-structured with purpose first, then usage, side effects, and disambiguation. Could be slightly more concise but remains effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema (not shown but indicated), the description covers all essential aspects: purpose, when to use, side effects, human-in-the-loop requirement, and integration workflow for test/live modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter amount_cents. The schema description already includes min/max, example, and unit. The tool description repeats this information without adding new meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates a one-time Stripe Checkout URL for adding funds to prepaid balance. It specifies the verb 'Generate' and resource 'Stripe Checkout URL', and distinguishes from siblings by noting it only mints a payment link and never moves money or blocks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: when get_balance shows insufficient funds for submit_query or a human asks to add money. Provides disambiguation about what it doesn't do (no money movement, blocking) and includes notes on test-mode vs live-mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceARead-only
Check the prepaid balance (in cents) available to fund submit_query calls, plus account mode. Call before submit_query if unsure funds suffice, or whenever a query fails/stalls for balance reasons. Read-only, no side effects, free in test and live mode. Response includes mode ("test" = sandbox key, free simulated responses; "live" = real key, real spend), and when relevant whether auto_reload is on, plus an auto_reload_setup_url + hint to enable it so a live account does not stall at zero balance. Disambiguation: reports funds available to spend; does not list queries (list_queries) or responses (get_responses/wait_for_responses).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| mode | No | |
| company_name | No | |
| balance_cents | No | |
| auto_reload_enabled | No | |
| auto_reload_setup_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. The description adds behavioral details such as 'no side effects,' response fields (mode, auto_reload, URL), and hints for enabling auto_reload, going beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized but each sentence adds distinct value: purpose, usage, read-only nature, response details, disambiguation. It is well-structured and front-loaded, though slightly verbose in the disambiguation part.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, 100% schema coverage, and an output schema, the description is fully complete. It covers what the tool does, when to use, the response structure, and how it differs from siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. The description does not need to add parameter info, and it sufficiently explains the output, which is the only relevant aspect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Check the prepaid balance' and specifies the resource (balance in cents) and its purpose (fund submit_query calls). It also disambiguates from sibling tools by noting it does not list queries or responses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use: 'Call before submit_query if unsure funds suffice, or whenever a query fails/stalls for balance reasons.' Also mentions it's free in test and live mode, providing clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_responsesARead-only
One-shot read: fetch a query's current status and whatever human responses have been submitted so far, without waiting. Use this to check progress on demand, or after wait_for_responses reports "pending" if you want an immediate snapshot instead of polling again. Read-only, no cost, returns instantly (does not block or retry). Disambiguation: unlike wait_for_responses, this never delays or blocks waiting for more answers to arrive -- it just reports what exists right now, which may be fewer than required_responses.
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | Yes | The id returned by submit_query, identifying which query to read. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| responses | No | |
| required_responses | No | |
| completed_responses | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, but the description adds valuable context: 'no cost, returns instantly (does not block or retry)' and clarifies that the response may include fewer than required_responses. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three well-structured sentences, each adding unique value. Front-loaded with the core action, then usage guidance, then behavioral notes. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter, full annotations, and an output schema (not shown but referenced), the description covers all needed aspects: purpose, usage, behavior, and distinction from siblings. It is complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of query_id. The description reinforces that the ID comes from submit_query, which adds context beyond the schema. A minor point: the description could mention the format or source more explicitly, but overall strong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses strong specific terms like 'One-shot read' and 'fetch...status and...responses,' clearly distinguishing from wait_for_responses. The verb 'fetch' combined with the resource 'query responses' leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('check progress on demand' or after wait_for_responses reports 'pending') and contrasts it with wait_for_responses by noting it never delays. This provides clear guidance on choosing between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_queriesARead-only
List your recent GetABrain queries, most recent first. Use this to get an overview of past/active queries, recover a query_id you lost track of, or filter by status (e.g. find everything still "active" or "pending"). Read-only, no cost. Disambiguation: this lists MANY queries at a summary level; it does not return the individual worker responses for any one query -- use get_responses or wait_for_responses with a specific query_id for that.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of queries to return, most recent first (1-100, default server-side). | |
| status | No | Optional filter to only return queries in this status (e.g. "active", "pending", "completed", "cancelled", "failed", "expired"). Omit to return all statuses. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | |
| total | No | |
| offset | No | |
| queries | No | |
| has_more | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, openWorldHint), description adds ordering ('most recent first'), cost ('no cost'), and summary-level scope. It also mentions status filtering capability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured: purpose, usage, then disambiguation. It is fairly concise, though slightly verbose with multiple sentences. Front-loaded with main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and low complexity (2 optional params), the description covers purpose, usage, and disambiguation adequately. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions for both parameters. The description reinforces filtering use case but does not add meaning beyond schema (e.g., formats, defaults). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists recent queries in reverse chronological order, using a specific verb ('List') and resource ('GetABrain queries'). It also distinguishes itself from siblings by noting it does not return individual responses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases: getting an overview, recovering a query_id, filtering by status. Also gives clear when-not-to-use guidance: for individual responses, use get_responses or wait_for_responses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rate_responseA
Rate a single worker's response 1-5 to feed the worker quality/reputation system, optionally with free-text feedback. Use after reviewing a response from get_responses/wait_for_responses, to reward good answers and flag poor ones -- this affects the worker's quality score and future eligibility (e.g. queries with min_worker_quality set) and can trigger rewards/suspension server-side. Side effect: writes a rating record and returns the updated worker quality score; does not resubmit or modify the original response. Disambiguation: rates a response you already have -- does not fetch new responses (use get_responses/wait_for_responses first).
| Name | Required | Description | Default |
|---|---|---|---|
| score | Yes | Quality rating for the response, 1 (worst) to 5 (best). Feeds the worker's ongoing quality score. | |
| query_id | Yes | The id of the query the response belongs to (from submit_query). | |
| response_id | Yes | The id of the specific response to rate (from get_responses/wait_for_responses output). | |
| feedback_text | No | Optional free-text comment explaining the rating, visible to the worker. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | |
| success | No | |
| worker_quality_score | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant context beyond annotations: it writes a rating record, returns updated quality score, does not resubmit or modify original, and mentions server-side rewards/suspension. No contradiction with annotations (readOnlyHint=false, destructiveHint=false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and is fairly concise. However, the first sentence is long and could be slightly streamlined without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, output schema exists), the description covers purpose, usage context, side effects, and disambiguation. The existence of an output schema means return values do not need to be explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds minimal extra meaning. It mentions 'free-text feedback' which matches 'feedback_text', but beyond that, the schema already explains all parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('rate', 'feed') and clearly states the resource (worker response). It distinguishes from sibling tools 'get_responses' and 'wait_for_responses' by noting it does not fetch new responses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('after reviewing a response from get_responses/wait_for_responses'), explains the effect on worker quality and future eligibility, and disambiguates from fetching tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_queryA
Submit a structured question to real human workers, returning a query_id -- the entry point for any human-in-the-loop (HITL) step: judgment calls, subjective evaluation, approval/review, or "ask a real person" tasks a model should not answer itself. "type" selects the question format (one of: text, multiple_choice, rating_scale, image_comparison, ranking, yes_no, sentiment, image_selection, free_form_text, video_review, audio_review, image_analysis, ab_test, voice_capture, video_capture, photo_capture); "content_data" is the matching type-specific payload (e.g. ab_test: {question, variant_a:{description}, variant_b:{description}}; yes_no: {question}; rating_scale: {question, scale_type, scale_min, scale_max}). Cost/side effects: with a LIVE key this deducts (bid_amount_cents + bonus_amount_cents) * required_responses from balance immediately and dispatches to paid workers (fails if balance too low -- check get_balance or use create_topup_link). With a TEST key, no balance is touched and responses are synthetic, marked simulated: true, so you can build/test a full pipeline for free before going live. Returns immediately, does not wait -- use get_responses (one-shot) or wait_for_responses (bounded polling) to retrieve answers.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Question format/template. One of: text, multiple_choice, rating_scale, image_comparison, ranking, yes_no, sentiment, image_selection, free_form_text, video_review, audio_review, image_analysis, ab_test, voice_capture, video_capture, photo_capture. Determines the required shape of content_data. | |
| title | Yes | Short human-readable title for the query, shown to workers as the task headline (5-255 characters). | |
| description | No | Optional longer explanation/context shown to workers alongside the title, for extra instructions or background. | |
| content_data | Yes | Type-specific payload whose required fields depend on "type" (e.g. {question, variant_a, variant_b} for ab_test; {question} for yes_no; {question, scale_type, scale_min, scale_max} for rating_scale). See the API docs for the full schema per type. | |
| bid_amount_cents | Yes | Cents paid to EACH worker per accepted response (absolute floor 5 = $0.05, max 10000000 = $100,000.00). The REAL minimum is effort-based, not flat: it scales with how long the query type honestly takes a worker to answer, priced at a fair ~$9/hr (0.25 cents/second). Quick types (yes_no, multiple_choice, sentiment, ab_test, headline_test, rating_scale) floor around 5 cents; medium types (image_comparison, image_selection, ranking, text, image_analysis) around 8-12 cents; capture types (voice_capture, photo_capture, custom) around 15 cents; longer types (free_form_text, video_capture) around 30 cents. video_review and audio_review scale with the actual clip length (content_data.video_duration_seconds / audio_duration_seconds) plus a review/write-up overhead, so a 10-minute video review requires roughly $1.65+ -- there is no upper cap, longer clips need proportionally higher bids. Bidding below the type-appropriate minimum is rejected with a 400 telling you the exact floor; call GET /requestor/suggested-bid?type=... for the current min_bid_cents and suggested_bid_cents for a given type before submitting. Total cost = (bid_amount_cents + bonus_amount_cents) * required_responses, deducted from balance in live mode. No charge occurs in test mode. | |
| bonus_amount_cents | No | Optional extra cents paid to EACH worker on top of bid_amount_cents per accepted response (default 0). Included in the total cost calculation. | |
| min_worker_quality | No | Optional minimum worker quality score (0-5) required to accept this query; higher restricts to more experienced/reliable workers. | |
| required_responses | Yes | Number of distinct human worker responses to collect before the query is considered complete (1-1000). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| status | No | |
| query_id | No | |
| simulated | No | |
| total_cost_cents | No | |
| required_responses | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Exceeds annotations by detailing cost/side effects, balance deduction, test mode, and asynchronous behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Effectively front-loaded with purpose and examples, but slightly long. Structure is clear with logical sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects: usage, parameters, cost, test mode, return behavior, and links to related tools. Adequate for a complex tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds significant context beyond the 100% schema coverage, with examples for content_data types, detailed pricing for bid_amount_cents, and behavior for test mode.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool submits a structured question to human workers for HITL tasks. It distinguishes from sibling tools like get_responses and wait_for_responses by noting it returns immediately and is the entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (judgment calls, subjective evaluation, etc.) and provides context on test vs live keys. Could more explicitly state when not to use, but the guidelines are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_responsesARead-only
Poll for human responses to a query, blocking for up to max_wait_seconds (default 50, max 50) before returning. Use right after submit_query to wait for real answers in one call instead of manually re-checking with get_responses. DOES NOT GUARANTEE COMPLETION -- if min_responses have not arrived within the time budget it returns status "pending" (with a hint to call again) rather than erroring; call again to keep waiting. Returns status "ready" with the responses array once enough have arrived (or the query otherwise completed). Read-only / free -- cost was already charged by submit_query. Disambiguation: unlike get_responses (instant, one-shot, may return 0 responses), this actively waits, trading time for a higher chance of a complete result.
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | Yes | The id returned by submit_query, identifying which query to wait on. | |
| min_responses | No | How many responses must arrive before returning status "ready" (default: the query's required_responses). | |
| max_wait_seconds | No | Maximum seconds to poll before giving up and returning status "pending" if not enough responses arrived yet (default 50, max 50). |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| status | No | |
| responses | No | |
| required_responses | No | |
| completed_responses | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, openWorldHint), the description reveals non-guarantee of completion, return statuses, and cost implications. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise yet comprehensive: every sentence adds distinct value (purpose, usage, behavior, alternatives). Well-structured and front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the polling/blocking complexity, the description fully covers behavior, return values, edge cases (timeout), and relation to sibling tools. Output schema exists, so return format explanation is optional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3 applies. The description mentions defaults for max_wait_seconds and min_responses but adds little beyond schema; acceptable but not outstanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool polls for human responses, blocks up to max_wait_seconds, and returns either 'ready' or 'pending'. It explicitly distinguishes from sibling get_responses by noting the active waiting behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using immediately after submit_query and contrasts with get_responses for one-shot checks. Also mentions read-only/free status and when to call again on pending, providing clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
v0.1.0- First observed
create_topup_link - First observed
get_balance - First observed
get_responses - First observed
list_queries - First observed
rate_response - First observed
submit_query - First observed
wait_for_responses
TDQS
Each tool has a clear, distinct purpose: topup link generation, balance checking, response retrieval (one-shot vs. waiting), query listing, response rating, and query submission. The descriptions explicitly differentiate overlapping tools like get_responses and wait_for_responses.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_topup_link, get_balance, list_queries). The verbs are descriptive and the naming convention is uniform.
With 7 tools, the server covers the essential operations for a human-in-the-loop system: balance management, query lifecycle (submit, wait, check), listing, and rating. The count feels well-scoped without unnecessary bloat or gaps.
The tool set covers the core workflow (submit, wait, get, rate, fund). However, there are minor gaps: no tool to cancel or delete a query, and no ability to manage balance history or refunds. These are not critical but slightly reduce completeness.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Human-as-a-Service for AI agents. Delegate tasks that need a real human, get results via API.
Human judgment for AI agents: discover capabilities, get quotes, and track paid human tasks.
1Human-in-the-loop API for AI agents. CAPTCHA, OTP, KYC, and approvals by real humans.
Hire verified humans for real-world tasks via API or MCP. 14 tools, free API key.
Related MCP Servers
- AlicenseAqualityCmaintenanceHuman-as-a-Service for AI agents. When your agent is blocked by a task that requires a real human β accepting ToS, creating accounts, submitting forms, identity verification β it calls NeedHuman. A human completes the task and returns the result with proof.3881MIT
- AlicenseAqualityBmaintenanceFeedback collection for AI agents. Create surveys from JSON schema, collect responses from groups of people, and retrieve structured results.51MIT
- AlicenseAqualityBmaintenanceEnables AI agents to recruit real humans for evaluation tasks like surveys, A/B tests, and ratings on text, images, audio, and video, returning aggregated results directly into the conversation.137MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to route tasks requiring human judgment (e.g., content moderation, refund decisions, data verification) to a vetted worker pool, with verified results returned via Lightning Network payments.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Guitarmaniac24/getabrain-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server