Skip to main content
Glama
lorkorblaq

io.github.lorkorblaq/labloop-mcp

by lorkorblaq

LabLoop MCP (demo)

An unofficial, fictional Model Context Protocol server that demonstrates a complete, multi-step booking flow for medical lab tests:

search → compare prices → quote → confirm booking → escalate to a human

Everything here is fake. Tests, test centers, prices ("credits"), bookings, profiles, and escalation tickets are fictional and held in memory. The server makes no network calls, needs no credentials, and never books, charges, or messages anyone. It is not medical advice and is not affiliated with any real healthcare provider.

Why this exists

This server is a reference for designing tools that LLMs can chain reliably:

  • Rules live next to arguments. Guidance like "strip filler words before searching" or "use the exact id from a prior lookup" sits in each parameter's description instead of a long system prompt.

  • Two-step writes. The booking tool returns a full quote first (needs_confirmation) and only books when it is called again with confirm=true after the user agrees. A quote leaves no state behind.

  • Actionable non-happy paths. Results carry a status (ambiguous, not_found, needs_info with a missing list, invalid_test_id) plus a message telling the model what to do next, instead of a bare error.

  • Graceful degradation. Each test in a multi-test order falls back to its cheapest center when the preferred one doesn't offer it (flagged with providerFallback), and tests that can't be resolved are reported in skipped_tests without failing the whole order.

  • Small surface. The only runtime dependencies are mcp and pydantic.

Related MCP server: MCP Medical Appointments Demo

Tools

Tool

What it does

Read-only

labloop_list_tests

List the full catalog (id, name, abbreviation, category)

yes

labloop_find_test

Find a test by name or abbreviation; handles ambiguous matches and fuzzy suggestions

yes

labloop_get_test_providers

Test centers and prices for one test, cheapest first

yes

labloop_quote_or_book_collection

Quote (confirm=false) or book (confirm=true) a home sample collection for one or more tests

no

labloop_get_user_profile

Read saved demo contact details

yes

labloop_update_user_profile

Save demo contact details for reuse in later bookings

no

labloop_escalate_to_human

Simulated hand-off to a human agent; logs a ticket in memory

no

Install and run

Requires Python 3.10+. The server speaks MCP over stdio.

pip install labloop-mcp        # or: uvx labloop-mcp
labloop-mcp

Claude Desktop / Claude Code

{
  "mcpServers": {
    "labloop": { "command": "uvx", "args": ["labloop-mcp"] }
  }
}

With Claude Code: claude mcp add labloop -- uvx labloop-mcp

Try it with MCP Inspector

npx @modelcontextprotocol/inspector uvx labloop-mcp

Example conversation flow

  1. "How much is a thyroid test?"labloop_find_test(name="thyroid")labloop_get_test_providers(test_id="tst-thyroid")

  2. "Book it with a lipid panel for next Monday at 9am, 12 Willow Ave."labloop_quote_or_book_collection(test_ids=["tst-thyroid","tst-lipid-panel"], user_id="demo-user-1", date_time="…", address="12 Willow Ave", phone_number="+15550000001") → returns needs_confirmation with the combined quote

  3. "Yes, go ahead." → the same call with confirm=truesuccessful, with simulated collectionId/schedulingId

  4. "This is wrong, I want a person."labloop_escalate_to_human(...)

Security and privacy

  • No secrets, API keys, or environment variables are required or read.

  • No outbound network access. All state is in process memory and is cleared on restart.

  • Every input is validated by Pydantic before it reaches the tool logic (E.164 phone numbers, email format, length limits).

  • Don't enter real personal data; this is a demo.

Development

python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
pytest
python scripts/smoke_test.py      # drives the server over stdio end-to-end

License

MIT

Available Tools

7 tools
labloop_escalate_to_humanEscalate to a human agentA

Hand the conversation to a human support agent (SIMULATED in this demo).

Use when the user asks for a real person, has a complaint, is frustrated, keeps hitting errors, or the request is beyond the other tools. Logs a ticket in memory and returns {status, simulated: true, ticketId, message}. No real message is sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNoBrief summary of the conversation so far, so the human agent has context.
user_queryYesThe user's request or problem, in their own words.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The annotations only set all hints to false, providing no safety or side-effect information, so the description must carry the full burden. It discloses that the action is simulated, logs a ticket in memory, returns a specific object structure, and that 'No real message is sent.' This is comprehensive and goes beyond what annotations convey.

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

Conciseness5/5

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

The description is three sentences: the first states the core action and simulation, the second gives usage criteria, and the third explains the outcome and return value. It is front-loaded with the primary purpose and every sentence adds value without redundancy.

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?

The tool has a clear output schema (as indicated by 'Has output schema: true'), and the description explicitly states the return structure ({status, simulated: true, ticketId, message}) and that no real message is sent. For a simple two-parameter tool with a well-defined use case and simulation caveat, nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters already having clear descriptions ('Brief summary of the conversation so far' and 'The user's request or problem'). The description text does not add additional semantic meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

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?

The description clearly states the action: 'Hand the conversation to a human support agent' with a specific resource (human agent) and explicitly notes it is SIMULATED in this demo. It also differentiates from sibling tools by indicating it is for cases 'beyond the other tools' and for user frustration, giving it a distinct scope.

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?

It provides explicit conditions for use: 'when the user asks for a real person, has a complaint, is frustrated, keeps hitting errors, or the request is beyond the other tools.' This is precise and actionable, and implies that other tools should be tried first, making it clear when this tool is the appropriate fallback.

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

labloop_find_testFind a test by nameA
Read-onlyIdempotent

Look up a medical test by name or abbreviation to get its id and details.

Details include description, eligible gender, turnaround time (hours), preparation advice, and sample type. Returns one of:

  • {status: "found", test: {...}}: a single match; use test.id in later calls.

  • {status: "ambiguous", options: [...]}: several matches; ask the user to pick one.

  • {status: "not_found", suggestions: [...]}: nothing matched; offer the close suggestions.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesONLY the core test keyword or abbreviation. Strip filler words like 'test', 'screening', 'checkup', or 'exam' from the user's phrasing first. This is a substring match, so a full phrase like 'psa test' will not match the stored name 'Total PSA (Prostate-Specific Antigen)'. Examples: 'psa test' -> 'PSA', 'hiv screening' -> 'HIV', 'thyroid checkup' -> 'thyroid'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

The annotations already establish that this is a read-only, idempotent operation and unambiguously safe to invoke. Beyond that, the description adds meaningful behavioral detail: it enumerates three possible return states (found, ambiguous, not_found) and gives explicit directives for each, such as asking the user to pick one or offering close suggestions. This is valuable behavioral transparency that surpasses what annotations convey.

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

Conciseness5/5

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

The description is four sentences, front-loaded with the primary purpose followed by a compact list of return statuses. Every sentence contributes necessary operational or decision-making information. There is no filler, redundancy, or verbosity.

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?

Given a single parameter, a rich schema description, a declared output schema, and comprehensive annotations, the tool description fully equips an agent to invoke it correctly. It explains the three possible outcomes and how to respond to each, leaving no ambiguity about the tool's behavior or subsequent steps.

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

Parameters3/5

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

The input schema provides a highly detailed description of the 'name' parameter, including substring-match semantics, how to strip filler words, and concrete examples. The tool description merely restates 'name or abbreviation' and does not add meaning beyond the schema. With 100% schema coverage, the baseline of 3 is appropriate.

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?

The description opens with a specific verb and resource: 'Look up a medical test by name or abbreviation to get its id and details.' This clearly identifies the tool's core function and distinguishes it from siblings like labloop_list_tests (listing all tests) and labloop_get_test_providers (retrieving providers). The scope is unambiguous.

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

Usage Guidelines4/5

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

The description provides clear contextual usage guidance, such as 'use test.id in later calls', which implies the tool is a prerequisite step for other operations. It does not explicitly name alternatives or state when not to use this tool, but the return-status handling instructions effectively route the agent's next steps. This is clear context without formal exclusions.

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

labloop_get_test_providersGet test prices by providerA
Read-onlyIdempotent

Get the test centers offering a test and their prices, cheapest first.

Returns {status, testId, testName, currency, providers: [{provider, price}]}, or {status: "invalid_test_id"} if the id is unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
test_idYesThe exact 'id' value (e.g. 'tst-cbc-basic') copied from a prior labloop_find_test or labloop_list_tests result. Never a test name or abbreviation such as 'PSA'. If no id is visible in the conversation yet, call labloop_find_test first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint, and openWorldHint. The description adds useful behavioral detail beyond those annotations: results are sorted cheapest first, and an invalid id returns '{status: "invalid_test_id"}' rather than throwing. This meaningfully informs an agent's expectations.

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

Conciseness5/5

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

The description is compact: one sentence states the core behavior and ordering, and a second sentence gives the exact return shape and error case. No filler or repetition exists.

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?

For a simple read-only lookup with one parameter, an output schema, and rich annotations, the description covers everything needed: the resource, the sort order, the return structure, and the invalid-id behavior. The parameter schema also supplies the prerequisite call guidance.

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

Parameters3/5

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

Schema description coverage is 100%, and the test_id parameter is already well documented with an example, a warning against using test names, and a fallback instruction to call labloop_find_test first. The main description adds no additional parameter semantics beyond what the schema provides, so the baseline of 3 is appropriate.

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?

The description uses a specific verb and resource: 'Get the test centers offering a test and their prices', and explicitly notes ordering ('cheapest first'). This clearly differentiates it from siblings like labloop_find_test and labloop_list_tests, which focus on finding/listing tests rather than providers and pricing.

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

Usage Guidelines4/5

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

The parameter description gives clear usage context: the test_id must be the exact 'id' from a prior labloop_find_test or labloop_list_tests result, and if no id is visible, the agent should call labloop_find_test first. It does not explicitly state when to prefer this tool over quote_or_book_collection, so it stops short of a full when/when-not contrast.

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

labloop_get_user_profileGet saved user detailsA
Read-onlyIdempotent

Fetch the demo user's saved contact details (name, phone, address, email).

Useful before booking, to avoid asking for details already on file. Profiles live in server memory only. Returns {status: "successful", profile} or {status: "not_found"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesIdentifier for the demo user, e.g. 'demo-user-1'. Any stable string works; reuse the same value across calls so saved details are remembered.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context beyond that: profiles live only in server memory, and the tool returns either a successful profile or a not_found status. This gives the agent useful expectations about persistence and failure modes.

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

Conciseness5/5

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

The description is compact and front-loaded: purpose, usage context, persistence caveat, and return contract are each covered in a few short sentences. Every sentence earns its place with no filler or repetition.

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?

For a simple read-only lookup with a single well-documented parameter, the description covers the purpose, the appropriate timing, the memory-only caveat, and the possible return statuses. There is no meaningful gap an agent would face when deciding whether to call this tool.

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

Parameters3/5

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

Schema description coverage is 100%, and the user_id parameter already has a detailed description with an example and guidance to reuse the same value. The tool description does not need to repeat parameter details, so the baseline score of 3 applies.

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?

The description begins with a specific verb ('Fetch') and names the exact resource ('demo user's saved contact details') including the fields returned. It is clearly distinguished from sibling labloop_update_user_profile, which writes rather than reads.

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

Usage Guidelines4/5

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

The description gives a concrete usage context: 'Useful before booking, to avoid asking for details already on file.' It does not explicitly state when not to use it or name alternative tools, but the read-vs-update contrast with sibling tools makes the intended use reasonably clear.

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

labloop_list_testsList all testsA
Read-onlyIdempotent

List every test in the LabLoop catalog with its id, name, abbreviation, and category.

Use to browse what is available, or when labloop_find_test cannot find what the user means. Returns {status, count, tests: [{id, name, abbrev, category}]}.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the return shape ({status, count, tests}) which is useful behavioral context beyond the annotations. However, it doesn't disclose potential size limits, pagination, or performance characteristics of listing the entire catalog, which would be valuable for a list-all operation.

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

Conciseness5/5

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

The description is compact and front-loaded: the first sentence states the core function and output fields, the second gives usage context, and the third specifies the return shape. Every sentence earns its place with no redundancy.

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?

For a zero-parameter, read-only list tool with an output schema and full annotation coverage, the description is complete. It tells the agent what the tool does, when to use it, and what it returns. Nothing essential is missing for correct invocation.

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?

The tool has zero parameters, so the schema is trivially complete (100% coverage). The description adds value by explaining what the response contains and the purpose of the list, which is more than the empty schema provides. Baseline 4 for zero-param tools is appropriate.

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?

The description clearly states the tool's function: 'List every test in the LabLoop catalog' with specific fields (id, name, abbreviation, category). It distinguishes itself from siblings by explicitly mentioning labloop_find_test as an alternative when the find tool fails.

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?

The description provides explicit usage guidance: 'Use to browse what is available, or when labloop_find_test cannot find what the user means.' This tells the agent exactly when to use this tool versus the sibling find tool, which is strong guidance.

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

labloop_quote_or_book_collectionQuote or book a home sample collectionA

Order one or more tests as a single home sample-collection booking. This takes two steps.

  1. Call with confirm=false (default) to get ONE combined quote: each test's center and price, a logistics fee, and the grand total. Nothing is booked.

  2. After the user explicitly approves, call again with the same arguments and confirm=true.

Address, phone, and email fall back to the user's saved profile, and new details are saved back after booking. Status values: needs_info (ask the user for 'missing'), invalid_test_id, needs_confirmation (show the quote), successful (simulated booking with collectionId and schedulingId).

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
notesNo
addressNo
confirmNoLeave false (the default) to get a quote only: each test's price and center, the logistics fee, and the grand total. Nothing is booked. Set true ONLY in a later call, after the user has seen the quote and explicitly agreed.
user_idYesIdentifier for the demo user, e.g. 'demo-user-1'. Any stable string works; reuse the same value across calls so saved details are remembered.
test_idsYesIds of ALL tests to include in this order. Pass every requested test in ONE call to get one combined quote and one booking. Each item must be an exact 'id' from a prior labloop_find_test or labloop_list_tests result.
care_typeNoone-time
date_timeNo
phone_numberNo
provider_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations are all false, but the description compensates by disclosing the two-step confirmation behavior, status values, fallback to saved profile, and saving new details after booking. It also notes that booking is simulated, which is important context 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.

Conciseness4/5

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

The description is lengthy but well-organized into numbered steps and lists status values. Every sentence adds value for a complex tool; while it could be tightened, the structure and front-loading of the core purpose justify a high score.

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?

For a 10-parameter tool with a low schema coverage, the description covers all essential aspects: two-step flow, status values, fallbacks, and provider selection. The output schema exists, so the description need not explain return values. It is complete for correct invocation.

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

Parameters5/5

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

Schema coverage is only 30%, so the description carries the burden. It thoroughly explains test_ids (must be exact ids, never names), confirm (boolean semantics), provider_name (fallback behavior), and address/phone/email fallback. This adds significant meaning beyond the schema.

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?

The description clearly states the verb and resource: 'Order one or more tests as a single home sample-collection booking.' It distinguishes the two-step quote/confirm flow and references sibling tools for test selection and provider lookup, making the purpose unambiguous.

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?

Explicitly instructs when to call with confirm=false to get a quote and when to call with confirm=true after user approval. It also tells the agent to pass all tests in one call and to first call labloop_find_test if IDs are not visible, providing clear usage direction.

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

labloop_update_user_profileSave user detailsA
Idempotent

Save new or corrected contact details so future bookings can reuse them.

Only the fields provided are changed. Returns {status, updated_fields, profile}.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
emailNo
phoneNo
addressNo
user_idYesIdentifier for the demo user, e.g. 'demo-user-1'. Any stable string works; reuse the same value across calls so saved details are remembered.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate idempotentHint=true and destructiveHint=false, and the description adds useful behavioral context: it performs a partial update ('Only the fields provided are changed') and returns a specific response shape ({status, updated_fields, profile}). This goes beyond the annotations and helps the agent understand side effects and return value.

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

Conciseness5/5

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

The description is three sentences, front-loads the main purpose, and includes the most important behavioral detail (partial update) and return shape. No wasted words.

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?

Given the output schema exists and annotations cover idempotency/safety, the description is fairly complete. It could mention that this is a write operation (though 'Save' implies it) or explicitly contrast with labloop_get_user_profile, but for a simple partial-update tool, the essential context is present.

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

Parameters3/5

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

Schema description coverage is only 20%, but the description adds the key semantic that only provided fields are changed, which is critical for understanding the nullable/default parameters. However, it doesn't elaborate on each parameter beyond what the schema already provides; the schema itself has decent per-field descriptions for name, email, phone, address, and user_id. The description compensates partially but not fully for the low coverage.

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?

The description states a clear verb ('Save') and resource ('user details' / 'contact details'), and explains the purpose: reuse for future bookings. It is distinguishable from siblings like labloop_get_user_profile, though it doesn't explicitly name that sibling.

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

Usage Guidelines4/5

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

The description says 'Only the fields provided are changed,' which gives clear partial-update semantics and implies when to use it (when you have corrected/new contact details). It doesn't explicitly contrast with labloop_get_user_profile or other siblings, but the context is clear enough for an agent to select it for updating profile fields.

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.

  1. 7 tool updatesv0.1.0
    • First observedlabloop_escalate_to_human
    • First observedlabloop_find_test
    • First observedlabloop_get_test_providers
    • First observedlabloop_get_user_profile
    • First observedlabloop_list_tests
    • First observedlabloop_quote_or_book_collection
    • First observedlabloop_update_user_profile

TDQS

A4.4/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct resource or action: catalog listing, test lookup, provider pricing, booking, profile get/update, and human escalation. The list/find pair is explicitly differentiated by description, and no two tools appear interchangeable.

Naming Consistency5/5

All tool names consistently use the labloop_ prefix with snake_case verb_noun patterns like list_tests, find_test, get_test_providers, and update_user_profile. The compound quote_or_book_collection is longer but still follows the same predictable convention.

Tool Count5/5

Seven tools is well-scoped for this domain: catalog discovery, pricing, booking, profile management, and escalation. Each tool earns its place with no redundant or filler tools.

Completeness4/5

Core workflows are covered: browse/find tests, get providers, quote and confirm a booking, and manage user profile. However, there is no way to look up past bookings or cancel a collection, leaving a minor dead end after a successful booking.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables LLM-based agents to interact with FHIR healthcare data through natural language prompts, providing full CRUD operations on FHIR resources, document processing, and semantic search capabilities.
    13
    100
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables users to manage medical appointments by searching for doctors, checking availability, and booking sessions through a natural language interface. It serves as a reference implementation for advanced MCP features like symptom-based specialist recommendations and multi-step scheduling workflows.
    4 npm
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Simulates a third-party appointment booking agent, enabling your AI platform to check availability and book appointments via MCP interoperability.
    -