Tabflows
Server Details
Tabflows facts: DPC Finder, price quotes, integrations, workflows, site search, demos, ask Tabflows
- Status
- Healthy
- Uptime
- 100.0% over 48 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 17 tools
Most tools target clearly distinct actions (book_demo vs get_demo_availability vs get_demo_booking_link; search vs search_dpc_practices; ask vs check_reply) and the descriptions draw the lines sharply. However, fetch and get_page are near-duplicates — both return the full markdown of a tabflows.com page by path/URL, including the same /llms.txt and /sitemap.md index files — leaving an agent to guess which to call.
Names are uniformly snake_case and mostly verb_noun (book_demo, check_reply, get_demo_availability, list_integrations, quote_tabflows_price, report_gap). Minor deviations are bare verbs (ask, fetch, search) and domain-prefixed noun phrases (dpc_break_even, dpc_startup_cost), but all remain readable and predictable.
17 tools is slightly above the comfortable 3-15 band, but the surface spans several genuine sub-domains (site content, demo booking, DPC calculators, DPC Finder, feedback), so most tools earn their place. The fetch/get_page redundancy is the only clear case of an unearned tool.
The surface covers content search/retrieval, demo availability and booking, pricing and DPC calculators, directory search, integration/workflow listing, and gap reporting — a full lifecycle for the site's purposes. Minor gaps: no way to view, reschedule or cancel an existing demo booking, and no explicit way to use the ask token to close or extend a conversation.
Available Tools
17 toolsaskAsk TabflowsADestructiveInspect
Send Tabflows a message for the person you are helping: a question, a request or a note for the team. Autopilot, Tabflows' AI assistant, answers, and the team sees it and may answer too. Never include patient names, dates of birth, medical details or any other patient information in the message. Pass the person's own name and email only with their agreement; Tabflows treats both as unverified claims, and nothing is emailed from here. Set consent true only after the person explicitly agrees to send their name, email and message to Tabflows; never infer consent, invent consent or reuse earlier consent for a follow-up. Returns a token that check_reply uses to read the answers, which usually take a few minutes, and that ask uses to follow up in the same conversation after fresh explicit consent. Anyone holding the token can read and follow up in the conversation until it expires, 24 hours after the conversation started.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The person's name, as they gave it | |
| Yes | The person's email, as they gave it | ||
| token | No | The token an earlier ask returned, to follow up in that conversation. Omit it to start a new one. | |
| consent | Yes | Set to true only after the person explicitly agrees to send their name, email and message to Tabflows. Never infer or invent consent; every follow-up requires fresh explicit consent. | |
| message | Yes | What the person wants to say to Tabflows. Never include patient names, dates of birth, medical details or any other patient information. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| token | No | |
| message | Yes | |
| expiresAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as non-read-only, destructive and open-world, but the description adds substantial context beyond them: PII prohibitions (no patient names, DOB, medical details), the unverified-claims treatment of name/email, that nothing is emailed from here, the returned token, and its 24-hour expiry with anyone-holding-it-can-read semantics.
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?
It is a dense, front-loaded paragraph where each sentence carries safety-relevant information, but the consent rules are partially restated from the schema, adding mild redundancy. Overall well-organized despite its length.
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?
Although an output schema exists, the description proactively explains the token's purpose, lifetime and follow-up behavior, plus the consent and PII constraints. Nothing an agent needs to invoke this correctly appears missing.
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%, so the baseline is 3, but the description adds genuine meaning: it explains that token enables follow-up in the same conversation (omit to start new), and elaborates consent and message restrictions beyond the field-level text.
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?
It states a specific verb+resource (send Tabflows a message on behalf of the person you are helping) and clarifies that Autopilot answers while the team may also respond. It also distinguishes itself from check_reply by explaining the token handoff, so an agent can tell the two apart without opening either schema.
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?
Explicit when-to-use conditions are given: set consent true only after explicit agreement, never infer/invent/reuse consent, and every follow-up needs fresh consent. It also routes the agent to check_reply for reading answers and explains the token-based follow-up path, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
book_demoBook a Tabflows demoADestructiveInspect
Book a time on the Tabflows demo calendar for the person you are helping, using a startTime and the durationMinutes it was listed under in get_demo_availability. HubSpot sends them the invitation and the calendar event. Only call this after the person has chosen the time and agreed to Tabflows contacting them at that email; set consent to true only then, and never invent their details.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | The person's work email | ||
| consent | Yes | Must be true: the person chose this time and agreed to Tabflows contacting them at this email. | |
| lastName | Yes | The person's last name | |
| timezone | Yes | IANA timezone the times are read in, e.g. "America/New_York" | |
| firstName | Yes | The person's first name | |
| startTime | Yes | An ISO 8601 start time returned by get_demo_availability | |
| durationMinutes | Yes | The durationMinutes that startTime is listed under in get_demo_availability |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| message | Yes | |
| bookedAt | No | |
| bookDemoUrl | Yes | |
| durationMinutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds the concrete external side effect: 'HubSpot sends them the invitation and the calendar event'. It also discloses the consent gate and the prohibition on fabricating details, which goes beyond annotation coverage.
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?
Three sentences, each earning its place: the action, the external side effect, and the key precondition. No filler, with important constraints front-loaded.
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?
With a full input schema, output schema present, and annotations covering destructive/read-only behavior, the description supplies the missing operational context: when to book, what happens externally, and the consent condition. Nothing needed for correct invocation is omitted.
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%, and the schema already explains startTime as returned by get_demo_availability, durationMinutes as the matching value, and consent's exact requirement. The description mostly restates these constraints; the only novel bit, 'never invent their details', is more behavioral than parameter-specific.
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 opens with 'Book a time on the Tabflows demo calendar', naming a specific action and resource. It also ties the call to availability from get_demo_availability, distinguishing it from sibling tools like get_demo_booking_link or fetch.
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?
Explicit guidance: 'Only call this after the person has chosen the time and agreed to Tabflows contacting them at that email; set consent to true only then'. This gives a clear precondition and when-not-to-call instruction, plus 'never invent their details'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_replyCheck for a Tabflows replyARead-onlyInspect
New replies in a conversation started with ask, read with the token ask returned: Autopilot's answers and messages from the Tabflows team, oldest first, each returned once. An empty list means no reply yet. Replies usually arrive within a few minutes, and a token allows 6 checks a minute. The token expires 24 hours after the conversation started.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | The token ask returned |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| message | Yes | |
| replies | Yes | |
| expiresAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety (readOnly, openWorld, non-destructive), and the description adds substantial behavior: oldest-first ordering, each reply returned exactly once, empty list means nothing yet, typical latency of a few minutes, a 6-checks-per-minute rate limit, and a 24-hour token expiry. This is exactly the operational context an agent needs to poll correctly.
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?
Front-loaded with the core action and token relationship, then layered with dedup, latency, and rate-limit facts. Dense but every clause carries information; only the sentence structure, not the content, is slightly heavy.
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?
With an output schema present, return shape needn't be described, yet the description still clarifies the incremental/one-shot delivery semantics and the empty-list case. Token lifetime and rate limits round out everything needed to call it safely and repeatedly.
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% and the schema already describes the token, so the baseline is 3. The description adds real meaning beyond it: the token's origin (returned by ask) and its 24-hour lifetime, which affects how long polling remains valid.
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?
States a specific verb and resource (check for new replies) and ties it to a named sibling, 'ask', which starts the conversation. An agent can distinguish this polling tool from ask without opening either schema.
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?
Clearly sets the context of use: only valid for conversations started with ask, using the token ask returned. It doesn't spell out a when-not case or a polling cadence recommendation beyond the rate limit, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dpc_break_evenDPC break-even calculatorARead-onlyInspect
How many members a direct primary care practice needs to break even, from its average monthly membership fee, the owner's annual pay goal, monthly overhead and per-member cost. Any input left out uses the calculator page's default. Returns the panel size, monthly fixed costs, revenue at break-even and profit at 300 and 500 members. Back-of-the-napkin math, not accounting advice.
| Name | Required | Description | Default |
|---|---|---|---|
| rent | No | ||
| other | No | ||
| staff | No | ||
| software | No | ||
| supplies | No | ||
| insurance | No | ||
| marketing | No | ||
| salaryGoal | No | ||
| variableCost | No | ||
| membershipFee | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| inputs | Yes | |
| calculatorUrl | Yes | |
| monthlySalary | Yes | |
| breakEvenMembers | Yes | |
| fixedMonthlyCosts | Yes | |
| monthlyProfitAt300 | Yes | |
| monthlyProfitAt500 | Yes | |
| revenueAtBreakEven | Yes | |
| contributionPerMember | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read operation, so the bar is lower. The description still adds real behavior: partial inputs fall back to page defaults, and the exact outputs (panel size, fixed costs, revenue at break-even, profit at 300/500 members) are disclosed up front.
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?
Front-loads the core question, then defaults, then return values, then a disclaimer — a sensible order with little waste. Four sentences for a 10-param calculator is reasonable, though the return-value sentence overlaps the output schema.
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?
With no required params, zero annotation gaps, and an output schema present, the description supplies everything else an agent needs: that omitted inputs default, and what the tool computes. Nothing essential for correct invocation is missing.
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 0% across 10 properties, so the description carries the burden and only partly meets it. It names the membership fee, salary goal, per-member cost and 'monthly overhead' conceptually, but never itemizes the seven distinct overhead fields (rent, staff, software, supplies, insurance, marketing, other) the agent must fill.
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?
States a specific computation (break-even member count for a DPC practice) plus the exact inputs that drive it. The framed question distinguishes it from the sibling dpc_startup_cost, so an agent can route without opening the schema.
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 only real guidance is 'Any input left out uses the calculator page's default,' which tells the agent partial invocations are allowed. There is no when-to-use/when-not framing and no explicit contrast with siblings like dpc_startup_cost.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dpc_startup_costDPC startup cost calculatorARead-onlyInspect
Estimated launch budget for a direct primary care practice: one-time setup costs plus a runway reserve (monthly burn times runway months), and the total with a 15% cushion. Start from a preset ("lean", "office" or "staffed"; default "office") and override any line item. Dollar amounts, rough planning math.
| Name | Required | Description | Default |
|---|---|---|---|
| legal | No | ||
| space | No | ||
| preset | No | ||
| buildout | No | ||
| supplies | No | ||
| equipment | No | ||
| insurance | No | ||
| marketing | No | ||
| monthlyBurn | No | ||
| runwayMonths | No | ||
| softwareSetup | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| inputs | Yes | |
| preset | Yes | |
| runway | Yes | |
| oneTime | Yes | |
| conservative | Yes | |
| calculatorUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuine behavior beyond that: the computed formula, the default preset, the built-in 15% cushion, and the caveat that these are "rough planning math" figures — an honest disclosure of precision limits that annotations cannot convey.
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?
One compact paragraph: purpose first, then the preset/override mechanics, then the currency and precision caveat. Every clause carries information — the formula, the default, the cushion percentage — with no filler.
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?
An output schema exists, so return values need not be described, and the description covers purpose, preset behavior, formula, and precision caveat. The remaining gap is the per-line-item semantics for a tool with 11 unlabeled parameters, which leaves some ambiguity about what each cost bucket is meant to include.
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 0% across 11 parameters, so the description has to carry the meaning. It explains the preset enum, its default, and the monthlyBurn × runwayMonths relationship, and states that amounts are dollars — but the eight individual line items (legal, space, buildout, supplies, equipment, insurance, marketing, softwareSetup) are left to their self-evident names with no per-field semantics.
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 gives a specific verb and resource: it estimates a DPC launch budget, spelling out the components (one-time setup costs, runway reserve = monthly burn × runway months, total with a 15% cushion). That is far more concrete than a name restatement. It never differentiates itself from the sibling dpc_break_even, so an agent comparing the two must infer the split from the resource name alone.
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?
It explains how to invoke the tool (start from a "lean"/"office"/"staffed" preset, default "office", override any line item) but not when to reach for it versus siblings like dpc_break_even. Usage is implied by the how-to-start instruction rather than stated as a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchFetch a tabflows.com pageARead-onlyInspect
The full markdown of a tabflows.com page by id: a site path such as /pricing, or the URL a search result carries. Also reads /llms.txt, /llms-full.txt and /sitemap.md. Answers one JSON text item holding id, title, text and url.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| intent | No | Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. "comparing admin tools for a two-location DPC clinic", under 200 characters. No names or personal details. Never include patient names, dates of birth, medical details or any other patient information. Omit it when you do not know; never invent one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false, destructiveHint=false), so the bar is lower. The description still adds real context beyond them: it discloses the return payload shape (one JSON text item with id, title, text, url) and the special side resources it can read. No auth or rate-limit detail, but that is a minor omission.
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?
Three dense sentences with no filler; the core capability and the id format are front-loaded before the special-file and return-shape details. Slightly compressed phrasing ('Answers one JSON text item') costs a little readability but nothing is wasted.
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?
With no output schema, the description correctly takes on the burden of describing the return payload (id, title, text, url). Combined with the id-format detail, an agent has enough to call it correctly; only the unresolved overlap with get_page keeps this short of complete.
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 50%: the optional 'intent' parameter is fully documented in the schema, but 'id' has no schema description at all. The description compensates by defining exactly what id accepts (a site path such as /pricing, or a URL carried by a search result), which is the meaningful semantic gap.
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?
States a specific verb and resource: fetch the full markdown of a tabflows.com page, with the accepted id forms spelled out (/pricing-style path or a URL from a search result). The purpose is unambiguous, but it never addresses the overlapping sibling get_page, so an agent cannot tell from the description alone which of the two page-reading tools to pick.
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?
Usage is only implied: 'the URL a search result carries' hints that this follows a search call, and the llms.txt/sitemap.md mention hints at doc-retrieval use. There is no explicit when-to-use statement, no exclusions, and no routing against get_page, which appears to serve a near-identical need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_demo_availabilityGet open Tabflows demo timesARead-onlyInspect
Open times on the Tabflows demo calendar, grouped by meeting length, soonest first. Every start time is a UTC ISO timestamp, whatever timezone is passed. An answer lists at most 20 times per meeting length: start sets a later date to read from, such as next week, and when truncated is true, nextStart is the start that returns the times after the cut. timezone is the person's IANA timezone: a start date is read in it, it picks the month monthOffset counts from, and the same timezone passed to book_demo sets the time zone of the booking and the invitation. A start time can be booked only with the durationMinutes it is listed under. Availability changes between calls, so times from an earlier answer may no longer be open.
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | Earliest time to list: a YYYY-MM-DD date read in timezone, or the nextStart of an earlier answer. Defaults to now. | |
| timezone | Yes | IANA timezone the times are read in, e.g. "America/New_York" | |
| monthOffset | No | Month to start reading at: 0 for this month (the default), 1 for next month, 2 for the one after |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | |
| timezone | Yes | |
| nextStart | No | |
| truncated | Yes | |
| bookDemoUrl | Yes | |
| availability | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, and the description adds substantial behavior beyond them: a hard cap of 20 times per meeting length, nextStart/truncated pagination semantics, the volatility warning that earlier answers may be stale, and the invariant that all times are UTC ISO regardless of the timezone passed.
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?
Front-loads the core purpose, then proceeds through output shape, parameter behavior, and the booking constraint, with no filler sentences. It is dense and somewhat long for a single paragraph, but each clause carries operational 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 an output schema already documents the return object, the description supplies exactly the non-schema facts an agent needs: truncation handling, timezone propagation, and the durationMinutes booking constraint.
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% (baseline 3), and the description still adds cross-parameter meaning: timezone governs how start is read, which month monthOffset counts from, and carries forward to book_demo. It does not restate format constraints (maxLength, monthOffset bounds) that the schema already carries.
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?
States a specific verb+resource ('open times on the Tabflows demo calendar') plus the shape of the answer ('grouped by meeting length, soonest first'), which lets an agent separate it from book_demo or get_demo_booking_link at a glance.
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?
Usage is implied rather than stated: an agent infers it calls this to find a slot before book_demo, and the description ties them together by saying a listed time 'can be booked only with the durationMinutes it is listed under'. There is no explicit when-to-use/when-not framing or named alternative (e.g. when to use get_demo_booking_link instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_demo_booking_linkGet a Tabflows demo or sign-up linkARead-onlyInspect
Links for the human to book a Tabflows demo or sign up. Books nothing itself; the person completes it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| signUpUrl | Yes | |
| bookDemoUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuine behavioral context beyond that: this call performs no booking and the human completes the action, clarifying the tool has no side effects on the booking itself.
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?
Two short sentences, front-loaded with what is returned, followed by the key disambiguating clause. Nothing is wasted and nothing needs trimming.
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?
With zero params, full schema coverage, an output schema covering the return value, and annotations covering the safety profile, the description only needs to establish purpose and the no-side-effect nature, which it does. It could name the alternative sibling to be fully complete.
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?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-param tool applies. The description correctly does not invent parameter details.
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 states the resource returned (links for booking a demo or signing up) and scopes it to Tabflows. It also implicitly separates itself from the sibling book_demo by clarifying that no booking is performed, though the phrasing is nominal ('Links for...') rather than a crisp verb+resource.
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?
Usage is implied rather than stated: 'Links for the human to book... Books nothing itself' suggests the human-driven path, which contrasts with book_demo and get_demo_availability. However, no sibling is named and there is no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dpc_practiceGet a DPC Finder practiceARead-onlyInspect
One DPC Finder listing by slug, with every field its page shows and its canonical URL.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| lat | Yes | |
| lng | Yes | |
| url | Yes | |
| city | Yes | |
| name | Yes | |
| slug | Yes | |
| model | Yes | |
| phone | No | |
| state | Yes | |
| doctor | No | |
| address | No | |
| website | No | |
| openDate | No | |
| precision | Yes | |
| specialty | No | |
| dataCaveat | Yes | |
| caseStudyUrl | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds that every field its page shows is returned plus a canonical URL, which is useful content context, but the output schema exists so return values needn't be re-explained. A 3 reflects modest added 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?
A single front-loaded sentence with zero waste; the key scope (one practice by slug) and output contents are stated immediately.
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?
For a single-read tool with full annotations and an output schema, the description is nearly complete, but with 0% parameter schema coverage it should explain what a slug is and where to get one. That gap is the main incompleteness.
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 0%, and the schema only gives type/pattern/length constraints without describing what a 'slug' is or how to obtain one. The description mentions 'by slug' but adds no meaning beyond the parameter name — it doesn't say where slugs come from (e.g., from search results) or format expectations, leaving the agent to infer.
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?
Specific verb ('Get') plus resource ('DPC Finder practice') and scope ('One ... by slug'). Clearly distinguished from the sibling search_dpc_practices which lists practices, whereas this retrieves a single one.
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 phrase 'by slug' implies this is for single-record retrieval and implicitly contrasts with search_dpc_practices, but the description never explicitly states when to use this vs. the search sibling or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integrationGet a Tabflows integrationARead-onlyInspect
One integration by slug: what Tabflows does with that tool, its features and its page.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| name | Yes | |
| slug | Yes | |
| category | Yes | |
| features | Yes | |
| description | Yes | |
| capabilities | Yes | |
| longDescription | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered without the description. The description adds that the payload covers capabilities, features and the integration page, but says nothing about permissions, failure on unknown slugs, or rate limits.
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?
A single compact sentence that front-loads the selection key ('by slug') before the returned content. It wastes nothing, though the fragment style is slightly telegraphic.
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?
With read-only annotations and an output schema in place, the description need not explain return values, and it correctly focuses on what content the tool surfaces. Only the lack of sibling routing against list_integrations leaves a small gap.
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 0%, so the schema documents only type/pattern/length for 'slug' without explaining its meaning. The description does clarify that the slug is the identifier used to select one integration, which is the minimum needed, but it adds no format or resolution guidance.
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?
Names a specific verb (get) and resource (integration) and scopes it to a single item retrieved by slug. It implicitly distinguishes itself from list_integrations through 'One integration', though it never names that sibling explicitly.
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?
Usage is only implied: fetch a single integration when you already have its slug. There is no stated when-not, no mention of list_integrations as the alternative for browsing, and no note on required slug format beyond what the schema already enforces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageRead a tabflows.com pageARead-onlyInspect
The full markdown of any public tabflows.com page by path or URL, e.g. /pricing, /faqs, /compliance, /glossary, /dpc-finder/texas, and the index files /llms.txt, /llms-full.txt and /sitemap.md. Answers one JSON text item holding id, title, text and url.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| intent | No | Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. "comparing admin tools for a two-location DPC clinic", under 200 characters. No names or personal details. Never include patient names, dates of birth, medical details or any other patient information. Omit it when you do not know; never invent one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, non-destructive and openWorldHint=false; the description adds value beyond them by disclosing the 'public pages only' access restriction and the shape of the response ('one JSON text item holding id, title, text and url'). It does not say what happens on a private/nonexistent path, but the annotation bar is lower here.
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?
Two sentences, front-loaded with the core action, and every element (path examples, index files, return fields) carries information. The example list is dense but each item earns its place as format guidance.
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?
With no output schema, the description correctly covers the return payload (id, title, text, url) and the path format. For a simple read tool with strong annotations, the only minor gap is error/not-found behavior for non-public or invalid paths.
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 50%: the intent parameter is fully documented in the schema, but path has no schema description. The description partially compensates by showing accepted path formats (leading-slash paths and index files), though 'by path or URL' is slightly looser than the schema's single string path field. 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?
States a specific verb+resource ('full markdown of any public tabflows.com page') and enumerates concrete path examples (/pricing, /faqs, /llms.txt) so the agent can distinguish it from siblings like fetch, search and list_integrations without opening the schema.
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 scope boundary ('any public tabflows.com page') and the example paths imply when the tool applies, but there is no explicit when-to-use guidance, no statement of when NOT to use it, and no routing to alternatives such as search for discovering pages or fetch for non-tabflows content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_integrationsList Tabflows integrationsBRead-onlyInspect
The tools Tabflows works with (EHRs, scribes, messaging, labs and more), optionally filtered by category.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| integrations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds useful content context (EHRs, scribes, messaging, labs) but discloses nothing about pagination, result volume, or auth requirements.
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?
A single front-loaded sentence with no waste, though it is arguably terse for a tool exposed alongside many unrelated siblings.
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?
An output schema exists so return values need no explanation, and the safety profile is covered by annotations. What remains missing is the relationship to get_integration and any hint about result scale, leaving the agent to guess when this listing is the right call.
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 0% for the single category parameter, so the description must compensate; it does say the filter is optional and names example categories, but its examples ('EHRs', 'scribes') don't match the enum's literal values ('EMR', 'Scribe'), which could mislead an agent.
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 states the resource clearly ('the tools Tabflows works with') and enumerates content categories, aligning with the tool name list_integrations. It does not explicitly contrast with the sibling get_integration, so an agent must infer that this is the collection-level call.
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?
It mentions an optional category filter, which hints at usage, but never says when to call this versus get_integration, nor whether the filter is required for meaningful results. No exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workflowsList Tabflows workflowsBRead-onlyInspect
Documented Tabflows workflows: what triggers each one, its steps, the outcome and the time it saves.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| workflows | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, read-only, non-open-world operation, so the safety profile is fully covered elsewhere. The description's only added behavioral nuance is the word 'Documented', implying undocumented workflows are excluded, but it says nothing about ordering, scale, or pagination. Adequate, not rich.
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?
A single compact sentence with every clause carrying information about what is returned; nothing is padded or repeated. It is front-loaded and easy to scan, though the elliptical phrasing (no verb) is slightly less crisp than a full statement.
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?
With no parameters, full annotation coverage, and an output schema that defines the return shape, the description only needs to orient the agent — which it does. It is arguably redundant in restating returned fields the output schema already covers, and it omits any tie-in to sibling tools, keeping it just under a 5.
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?
The tool takes zero parameters and the schema coverage is 100%, so there is no parameter semantics the description needs to compensate for. A zero-parameter tool lands at the baseline 4.
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 fragment 'Documented Tabflows workflows' names a specific resource and the description enumerates the content each entry carries (trigger, steps, outcome, time saved), so an agent understands the tool returns a catalogue of workflow definitions. The verb is only implied by the name rather than stated, and no sibling (e.g. list_integrations) is referenced for contrast, so it falls short of a 5.
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?
There is no when-to-use guidance, no preconditions, and no mention of alternatives among the many sibling list/get tools (list_integrations, get_integration, search, fetch). The description is purely descriptive of content, leaving the agent to infer when this call is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_tabflows_priceQuote a Tabflows priceARead-onlyInspect
The monthly Tabflows price for a practice's number of locations and monthly paying patients, with a breakdown and the pricing rule, plus the optional Practice X-ray: a $500 one-time diagnostic, separate from the monthly price. Prices come from the same pricing rule tabflows.com/pricing shows.
| Name | Required | Description | Default |
|---|---|---|---|
| locations | Yes | ||
| monthlyPayingPatients | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| rule | Yes | |
| breakdown | Yes | |
| signUpUrl | Yes | |
| monthlyUsd | Yes | |
| pricingUrl | Yes | |
| bookDemoUrl | Yes | |
| practiceXray | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: it discloses the return shape (breakdown plus pricing rule) and, importantly, clarifies that the $500 Practice X-ray is a separate one-time diagnostic rather than part of the monthly figure, which prevents a costly misreading.
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?
A single dense sentence that front-loads the core purpose and appends the X-ray caveat, with no filler. It is slightly crowded, packing the main quote and the optional add-on into one sentence, but nothing is wasted.
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?
For a two-parameter, read-only calculator with an output schema, the description covers what the agent needs: inputs, the returned breakdown and rule, and the separate X-ray cost. Return values need not be spelled out further because an output schema exists, so only the absent usage routing keeps this from being fully complete.
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 0%, so the description carries the burden, and it does map the two inputs to their business meaning ('a practice's number of locations and monthly paying patients'). However, it adds little beyond what the self-explanatory parameter names already convey and says nothing about the 1-100 / 1-250000 bounds, so it only partially compensates.
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 names a specific verb (quote) and resource (monthly Tabflows price) and states exactly what the computation is based on: a practice's number of locations and monthly paying patients. It is clearly distinguishable in intent, though it does not explicitly contrast itself with pricing-adjacent siblings like dpc_break_even or dpc_startup_cost.
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?
There is no 'when to use this' guidance, no exclusions, and no mention of when an agent should choose this over a sibling like dpc_startup_cost or dpc_break_even. The note that prices match tabflows.com/pricing is provenance, not usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_gapReport what tabflows.com is missingAInspect
Tell Tabflows what you looked for and could not find: a question the pages and tools did not answer, a tool that would have helped, or an answer that was confusing or failed. Tabflows reads these to fill the gaps and sends no reply. No names, emails or other personal details. Never include patient names, dates of birth, medical details or any other patient information.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | What the person wanted, what you tried, and what you could not find or what went wrong. No personal details. Never include patient names, dates of birth, medical details or any other patient information. | |
| category | No | ||
| toolName | No | The tool this is about, if any |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | |
| received | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: the submission is one-way with no reply, and there are hard privacy prohibitions (no names/emails, never patient names, DOB, medical details). This matters because annotations only say readOnly=false and destructive=false, which is easy to misread as a safe read. No rate limits or retention behavior are stated, so it is not fully exhaustive.
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?
Two sentences, front-loaded with the purpose and the accepted content types, followed by the routing/privacy constraints. The repetition of the privacy rule is deliberate reinforcement of a safety constraint, not padding.
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?
For a single-message submission tool with an output schema present, the description covers purpose, one-way behavior, and safety constraints adequately. The remaining gap is the undescribed category enum, which the description could have disambiguated but does not.
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 67% — message and toolName are documented in the schema, while category is an undescribed enum. The description echoes the message content expectations (question, tool, confusing answer) but says nothing about the category values or when to use 'other' vs the specific buckets, so it adds only marginal value over the schema.
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?
Names a specific verb+resource ('Tell Tabflows what you looked for and could not find') and enumerates the exact kinds of gaps accepted: unanswered questions, missing tools, confusing answers. This is clearly distinguishable from siblings like ask, search, or fetch, which retrieve rather than report.
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?
Gives a clear trigger condition ('what you looked for and could not find') and, via 'Tabflows reads these to fill the gaps and sends no reply', implicitly rules out using it when a reply is wanted. It never explicitly names an alternative such as ask for cases where the agent wants an answer, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch tabflows.comARead-onlyInspect
Keyword search over tabflows.com pages (product, pricing, FAQs, compliance, glossary, blog, integrations). Each result carries a page id, its title, a snippet of the text that matched and its URL; fetch reads the full page by that id or URL. DPC Finder listings are not indexed here; search_dpc_practices covers them.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| intent | No | Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. "comparing admin tools for a two-location DPC clinic", under 200 characters. No names or personal details. Never include patient names, dates of birth, medical details or any other patient information. Omit it when you do not know; never invent one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: the exact index coverage (product, pricing, FAQs, compliance, glossary, blog, integrations) and the explicit exclusion of DPC Finder listings.
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?
Two sentences, front-loaded with the core purpose and index scope, then the result shape, then the exclusion and alternative. Every clause carries distinct information with no padding.
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?
With an output schema present, the description correctly needn't re-explain return values, and with annotations present the safety profile is covered. What remains — index scope, the id/URL hand-off to `fetch`, and the search_dpc_practices alternative — is exactly the routing information an agent needs.
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 50%: the `intent` parameter is richly documented in the schema itself, while `query` carries no description but is self-evident from its name and constraints. The description adds no syntax, format or length guidance beyond what the schema already provides, so the baseline 3 applies.
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?
States a specific verb ('Keyword search') and a precisely bounded resource ('tabflows.com pages') and enumerates the page families covered. It also explicitly differentiates itself from the sibling search_dpc_practices by naming what is absent from the index.
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?
It gives explicit when-not guidance ('DPC Finder listings are not indexed here; search_dpc_practices covers them') and routes the agent onward to `fetch` for full page content by id or URL. The agent can choose between search, search_dpc_practices and fetch without opening any schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_dpc_practicesSearch the DPC FinderARead-onlyInspect
Search Tabflows' DPC Finder directory of direct primary care practices in the US by free text (name, city, doctor, specialty), state, city and practice model. Returns full listings including address, phone and doctor as on file, with the total match count for paging.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Exact city name, case-insensitive | |
| limit | No | ||
| model | No | ||
| query | No | Free text matched against name, city, doctor and specialty | |
| state | No | Two-letter state code, e.g. "TX" | |
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| results | Yes | |
| stateDirectoryUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower; the description still adds real value by disclosing that results are full listings (address, phone, doctor as on file) and that a total match count is returned for paging. It stops short of saying how filters combine or whether matches are prefix/substring.
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?
Two dense sentences: the search scope and facets come first, then the return shape and paging hint. Nothing is repeated from the schema and no sentence is filler.
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?
An output schema exists, so explaining return fields is optional, yet the description still covers them; the filter facets and paging mechanism are described adequately for a zero-required-parameter search tool. The residual gap is filter-combination and pagination mechanics, which matter given offset's high maximum.
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?
With only 50% schema coverage, the description carries weight: it explains that `query` is matched against name, city, doctor and specialty, and enumerates the state, city and practice-model filters, matching four of the six parameters. `limit` and `offset` are only obliquely covered by the 'total match count for paging' phrase, and the model enum values are left to the schema.
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?
Names a specific verb (Search) and a specific resource (Tabflows' DPC Finder directory of direct primary care practices in the US), plus the facets it searches over. It implicitly separates itself from get_dpc_practice (single record fetch vs. directory search), though it never names that sibling outright.
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?
Usage is only implied by the filter list (free text, state, city, model) and the paging note; there is no statement of when to prefer this over get_dpc_practice, whether filters combine, or what to do when zero results come back.
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 tool update
- Changed
search_dpc_practices1 field changed- changed
Input schema / properties / offset / maximumPrevious value: -5067New value: +5064
1 tool update
- Changed
search_dpc_practices1 field changed- changed
Input schema / properties / offset / maximumPrevious value: -2777New value: +5067
1 tool update
- Changed
search_dpc_practices1 field changed- changed
Input schema / properties / offset / maximumPrevious value: -2775New value: +2777
1 tool update
- Changed
search_dpc_practices1 field changed- changed
Input schema / properties / offset / maximumPrevious value: -2663New value: +2775
5 tool updates
- Changed
ask1 field changed- changed
Input schema / properties / message / descriptionPrevious value: -"What the person wants to say to Tabflows"New value: +"What the person wants to say to Tabflows. Never include patient names, dates of birth, medical details or any other patient information."
- Changed
fetch1 field changed- changed
Input schema / properties / intent / descriptionPrevious value: -"Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. \"comparing admin tools for a two-location DPC clinic\", under 200 characters. No names or personal details. Omit it when you do not know; never invent one."New value: +"Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. \"comparing admin tools for a two-location DPC clinic\", under 200 characters. No names or personal details. Never include patient names, dates of birth, medical details or any other patient information. Omit it when you do not know; never invent one."
- Changed
get_page1 field changed- changed
Input schema / properties / intent / descriptionPrevious value: -"Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. \"comparing admin tools for a two-location DPC clinic\", under 200 characters. No names or personal details. Omit it when you do not know; never invent one."New value: +"Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. \"comparing admin tools for a two-location DPC clinic\", under 200 characters. No names or personal details. Never include patient names, dates of birth, medical details or any other patient information. Omit it when you do not know; never invent one."
- Changed
report_gap1 field changed- changed
Input schema / properties / message / descriptionPrevious value: -"What the person wanted, what you tried, and what you could not find or what went wrong. No personal details."New value: +"What the person wanted, what you tried, and what you could not find or what went wrong. No personal details. Never include patient names, dates of birth, medical details or any other patient information."
- Changed
search1 field changed- changed
Input schema / properties / intent / descriptionPrevious value: -"Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. \"comparing admin tools for a two-location DPC clinic\", under 200 characters. No names or personal details. Omit it when you do not know; never invent one."New value: +"Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. \"comparing admin tools for a two-location DPC clinic\", under 200 characters. No names or personal details. Never include patient names, dates of birth, medical details or any other patient information. Omit it when you do not know; never invent one."
3 tool updates
- Changed
get_integration2 fields changed- added
Output schema / properties / capabilitiesAdded value: +{ + "additionalProperties": false, + "properties": { + "contextRead": { + "additionalProperties": false, + "properties": { + "evidence": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "status", + "evidence" + ], + "type": "object" + }, + "executeWrites": { + "additionalProperties": false, + "properties": { + "evidence": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "status", + "evidence" + ], + "type": "object" + }, + "preparedActions": { + "additionalProperties": false, + "properties": { + "evidence": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "status", + "evidence" + ], + "type": "object" + } + }, + "required": [ + "contextRead", + "preparedActions", + "executeWrites" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "slug", - "name", - "category", - "description", - "longDescription", - "features", - "url" -]New value: +[ + "slug", + "name", + "category", + "description", + "longDescription", + "features", + "capabilities", + "url" +]
- Changed
list_integrations2 fields changed- added
Output schema / properties / integrations / items / properties / capabilitiesAdded value: +{ + "additionalProperties": false, + "properties": { + "contextRead": { + "additionalProperties": false, + "properties": { + "evidence": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "status", + "evidence" + ], + "type": "object" + }, + "executeWrites": { + "additionalProperties": false, + "properties": { + "evidence": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "status", + "evidence" + ], + "type": "object" + }, + "preparedActions": { + "additionalProperties": false, + "properties": { + "evidence": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "status", + "evidence" + ], + "type": "object" + } + }, + "required": [ + "contextRead", + "preparedActions", + "executeWrites" + ], + "type": "object" +} - changed
Output schema / properties / integrations / items / requiredPrevious value: -[ - "slug", - "name", - "category", - "description", - "url" -]New value: +[ + "slug", + "name", + "category", + "description", + "capabilities", + "url" +]
- Changed
list_workflows6 fields changed- added
Output schema / properties / workflows / items / properties / accessModelAdded value: +{ + "type": "string" +} - added
Output schema / properties / workflows / items / properties / capabilityCaveatAdded value: +{ + "type": "string" +} - added
Output schema / properties / workflows / items / properties / initiationModeAdded value: +{ + "type": "string" +} - added
Output schema / properties / workflows / items / properties / steps / items / properties / actionKindAdded value: +{ + "type": "string" +} - changed
Output schema / properties / workflows / items / properties / steps / items / requiredPrevious value: -[ - "title", - "description" -]New value: +[ + "title", + "description", + "actionKind" +] - changed
Output schema / properties / workflows / items / requiredPrevious value: -[ - "slug", - "title", - "description", - "trigger", - "steps", - "outcome", - "timeSaved", - "url" -]New value: +[ + "slug", + "title", + "description", + "trigger", + "initiationMode", + "accessModel", + "capabilityCaveat", + "steps", + "outcome", + "timeSaved", + "url" +]
1 tool update
- Changed
quote_tabflows_price2 fields changed- added
Output schema / properties / practiceXrayAdded value: +{ + "additionalProperties": false, + "properties": { + "oneTimeUsd": { + "type": "number" + }, + "summary": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "oneTimeUsd", + "summary", + "url" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "monthlyUsd", - "breakdown", - "rule", - "pricingUrl", - "signUpUrl", - "bookDemoUrl" -]New value: +[ + "monthlyUsd", + "breakdown", + "rule", + "practiceXray", + "pricingUrl", + "signUpUrl", + "bookDemoUrl" +]
4 tool updates
- Changed
fetch1 field changed- added
Input schema / properties / intentAdded value: +{ + "description": "Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. \"comparing admin tools for a two-location DPC clinic\", under 200 characters. No names or personal details. Omit it when you do not know; never invent one.", + "type": "string" +}
- Changed
get_page1 field changed- added
Input schema / properties / intentAdded value: +{ + "description": "Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. \"comparing admin tools for a two-location DPC clinic\", under 200 characters. No names or personal details. Omit it when you do not know; never invent one.", + "type": "string" +}
- Added
report_gap - Changed
search1 field changed- added
Input schema / properties / intentAdded value: +{ + "description": "Optional. One line on why you are making this call: the high-level goal of the person you are helping, not the lookup itself, e.g. \"comparing admin tools for a two-location DPC clinic\", under 200 characters. No names or personal details. Omit it when you do not know; never invent one.", + "type": "string" +}
4 tool updates
- Changed
fetch1 field changed- changed
Output schema / (root)Previous value: -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "text": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "required": [ - "id", - "title", - "text", - "url" - ], - "type": "object" -}New value: +null
- Changed
get_demo_availability5 fields changed- changed
Input schema / properties / monthOffset / descriptionPrevious value: -"0 for this month (the default), 1 for next month, 2 for the one after"New value: +"Month to start reading at: 0 for this month (the default), 1 for next month, 2 for the one after" - added
Input schema / properties / startAdded value: +{ + "description": "Earliest time to list: a YYYY-MM-DD date read in timezone, or the nextStart of an earlier answer. Defaults to now.", + "maxLength": 35, + "type": "string" +} - added
Output schema / properties / nextStartAdded value: +{ + "type": "string" +} - added
Output schema / properties / truncatedAdded value: +{ + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "timezone", - "availability", - "bookDemoUrl", - "message" -]New value: +[ + "timezone", + "availability", + "truncated", + "bookDemoUrl", + "message" +]
- Changed
get_page1 field changed- changed
Output schema / (root)Previous value: -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "text": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "required": [ - "id", - "title", - "text", - "url" - ], - "type": "object" -}New value: +null
- Changed
search2 fields changed- added
Output schema / properties / results / items / properties / snippetAdded value: +{ + "type": "string" +} - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "id", - "title", - "url" -]New value: +[ + "id", + "title", + "snippet", + "url" +]
2 tool updates
- Added
ask - Added
check_reply
2 tool updates
- Added
book_demo - Added
get_demo_availability
12 tool updates
- First observed
dpc_break_even - First observed
dpc_startup_cost - First observed
fetch - First observed
get_demo_booking_link - First observed
get_dpc_practice - First observed
get_integration - First observed
get_page - First observed
list_integrations - First observed
list_workflows - First observed
quote_tabflows_price - First observed
search - First observed
search_dpc_practices
Related MCP Connectors
Price, sample and request page-cited medical chronologies for law firms and LNCs. No sign-in or PHI.
Read-only facts about Answering Service Care: company info, services, pricing, site search.
Find ready-made business spreadsheets, or get a fixed-price quote for a done-for-you automation.
Hotel PMS pricing, comparisons, OTA savings math, docs search and live demo availability.
Related MCP Servers
- AlicenseBqualityCmaintenanceQuery 20 structured datasets from AI agents — healthcare providers (9M NPI records), SEC EDGAR filings, PACER federal courts, USPTO patents and trademarks, OFAC sanctions screening, crypto whale wallets, DeFi liquidation signals, Polymarket smart money, economic indicators (FRED/BLS), federal contracts, NOAA weather, and OTC shell risk scoring. Pay per query, no subscriptions751MIT

Pipeworxofficial
AlicenseNot gradedqualityDmaintenanceLive data gateway for AI agents. 261 data sources, 961 tools — SEC filings, FDA adverse events, trade flows, mortgage rates, clinical trials, government contracts. Ask questions in plain English with ask_pipeworx.10MIT- AlicenseAqualityBmaintenanceReal US & Canada dental price data for AI assistants: average costs by procedure, state and city, insurance acceptance, and cheapest-state lookups — backed by open datasets (CC BY 4.0, permanent DOIs).454 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query up-to-date, sourced information about workflow automation services, AI agents, integrations, pricing, case studies, FAQs, and contact details in Dutch and English through read-only tools.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.