findabis
Server Details
Public directory of UK medical cannabis clinics, pharmacies, products and strains.
- Status
- Healthy
- Uptime
- 90.4% over 24 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: find_* tools target specific entity types (clinics, pharmacies, products, strains), get_listing and get_product retrieve details for a single entity, and search_findabis is a fallback for unknown types. The descriptions explicitly cross-reference and delineate boundaries, leaving no ambiguity.
All tool names use lower snake_case with a consistent verb-first pattern (find_, get_, search_), and the noun components are predictable. The only slight variation is search_findabis using the server name as the noun, but it remains within the same convention.
Seven tools is well-scoped for a directory server, with each tool earning its place: four search tools for the main entity types, two detail tools, and one global search. No redundant or trivial tools.
The surface provides comprehensive search and detail coverage for clinics, pharmacies, products, and strains, plus detail for brands via get_listing. However, there is no dedicated find_brands tool, so brand discovery relies on the generic search_findabis, and there is no browse-all capability, which is a minor gap for a directory.
Available Tools
8 toolscompare_providersCompare clinics or pharmaciesRead-onlyIdempotentInspect
Two to six clinics, or two to six pharmacies, side by side by slug. Clinics: first and follow-up fees, estimated year-one and later-year clinic fees with a line-by-line breakdown for the patient type and visit counts you give, consultation types, CQC rating, reviews and whether accepting patients. Pharmacies: delivery and its cheapest price, free-delivery threshold, collection, GPhC registration and inspection outcome, reviews. Use it for 'which is cheapest', 'what's the difference between'. Services only: it never compares medicines or medicine prices, and the figures are each provider's published ones.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Compare clinics or pharmacies (not both at once). | |
| slugs | Yes | 2-6 page slugs from find_clinics / find_pharmacies. | |
| patientType | No | Clinics: price year one as NEW_PATIENT (default), TRANSFER or ACTIVE_PATIENT. | |
| followUpsPerYear | No | Clinics: follow-up consultations a year. Default 4. | |
| prescriptionsPerYear | No | Clinics: repeat prescriptions a year. Default 12. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | Yes | |
| clinics | No | |
| missing | Yes | Slugs with no such listing |
| pharmacies | No |
find_clinicsFind medical cannabis clinicsRead-onlyIdempotentInspect
Find UK clinics that can prescribe cannabis-based medicines. Use near (postcode or town) for 'near me' questions: nearest first, with miles. Filter by the conditions a clinic's published policy lists, consultation type (online, in person, phone), CQC rating, first-consultation fee, accepting patients and patient type; sort by distance, year-one clinic fees or rating. Returns up to 25 clinics, each with slug, page URL, town, distance, first and follow-up fees, estimated year-one clinic fees (never medicine), consultation types, CQC rating, review score and which patient types it takes. A listed condition is the clinic's referral scope, not a statement that anyone qualifies: only a specialist decides that. It does not return doctors or appointment availability. For one clinic in full, use get_listing; to weigh several, compare_providers.
| Name | Required | Description | Default |
|---|---|---|---|
| cqc | No | CQC rating filter; GOOD_OR_BETTER keeps Good and Outstanding. | |
| near | No | A UK postcode, outcode or town, e.g. "M1 1AE", "LS6" or "Bristol". Sorts nearest first and adds miles. | |
| sort | No | distance (default with `near`), az (default otherwise), za, cheapest / dearest by year-one clinic fees, rating. | |
| limit | No | How many to return, 1-25. Default 10. | |
| query | No | Clinic name, matched as text. For a place use `near`. | |
| condition | No | Only clinics whose published policy lists this condition. One of: Anxiety / Depression; PTSD; Insomnia / Sleep disorders; Chronic pain; Neuropathic pain; Multiple Sclerosis / Spasticity; Cancer symptoms; IBD (Crohn's / Ulcerative Colitis); Migraine; Arthritis / inflammatory pain; ADHD / Autism spectrum symptoms; Endometriosis / women's health symptoms. A listed condition is the clinic's referral scope, never a statement that anyone qualifies. | |
| patientType | No | NEW_PATIENT, TRANSFER or ACTIVE_PATIENT. Drops clinics whose policy does not take it, and prices year one for that route. | |
| radiusMiles | No | Only within this many miles of `near`. Ignored without `near`. | |
| consultationType | No | Only clinics offering ONLINE (video), IN_PERSON or PHONE. | |
| acceptingPatients | No | Only clinics showing 'Accepting patients' (an active published policy). | |
| maxFirstConsultationFee | No | Only clinics whose first consultation costs at most this, in GBP. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| total | Yes | How many matched in all; narrow the query when this exceeds the results |
| results | Yes |
find_pharmaciesFind dispensing pharmaciesRead-onlyIdempotentInspect
Find UK pharmacies that dispense cannabis-based medicines against a prescription a clinic has already issued. Use near (postcode or town) for nearest first with miles; filter by delivery, in-person collection and review score. Returns up to 25 pharmacies with slug, page URL, town, distance, delivery and collection, and review score. A pharmacy cannot prescribe. It does not return stock, prices, or which products a pharmacy holds: those are shown only to patients and professionals with access. For delivery prices and GPhC registration use get_listing, or compare_providers for several.
| Name | Required | Description | Default |
|---|---|---|---|
| near | No | A UK postcode, outcode or town, e.g. "M1 1AE", "LS6" or "Bristol". Sorts nearest first and adds miles. | |
| sort | No | distance (default with `near`), az (default otherwise), za, city, rating. | |
| limit | No | How many to return, 1-25. Default 10. | |
| query | No | Pharmacy name, matched as text. For a place use `near`. | |
| delivers | No | Only pharmacies that deliver (most dispense UK-wide by post). | |
| minRating | No | Only pharmacies with patient reviews averaging 3+ or 4+. | |
| collection | No | Only pharmacies offering in-person collection. | |
| radiusMiles | No | Only within this many miles of `near`. Ignored without `near`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| total | Yes | How many matched in all; narrow the query when this exceeds the results |
| results | Yes |
find_productsFind medical cannabis productsARead-onlyIdempotentInspect
Find cannabis-based medicines on the UK market by product, brand or strain name, or by dose form. Returns up to 25 products with page URL, slug, brand, dose form, THC and CBD content, and the latest price a UK pharmacy charged (naming no pharmacy) when Findabis publishes one. It does not return stock, pack sizes on offer, per-pharmacy prices or which pharmacies dispense a product: those are shown only to patients and professionals with access. A listing is not a statement that a product suits anyone. For one product in full, use get_product with its slug.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Alphabetical, name_asc (default) or name_desc. | |
| limit | No | How many to return, 1-25. Default 10. | |
| query | No | Product, brand or strain name, e.g. "Pink Kush" or "Tilray". Omit to browse. | |
| category | No | Dose form. CARTRIDGE is a vape cartridge. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| total | Yes | How many matched in all; narrow the query when this exceeds the results |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, non-destructive), and the description adds substantive context beyond them: it names what IS returned (URL, slug, brand, dose form, THC/CBD, latest pharmacy price) and, crucially, what is NOT (stock, pack sizes, per-pharmacy prices, dispensing pharmacies), explaining that the latter is access-restricted. The 'not a statement that a product suits anyone' caveat is an extra, non-obvious behavioral disclosure.
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 purpose, then output scope, exclusions, disclaimer, and the sibling routing – each sentence is informative. It is slightly dense/run-on and the return-field enumeration is partly redundant given an output schema exists, but nothing 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?
For a 4-param, zero-required search tool with an output schema, the description supplies everything an agent needs: search axes, result cap, what is and isn't returned, the access-restriction rationale, and routing to get_product. No meaningful gap remains.
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 schema already documents all four parameters including enum values and the 1-25 limit. The description only restates the query axes ('by product, brand or strain name, or by dose form') without adding syntax or semantics beyond what the schema provides, so 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 ('Find') and resource ('cannabis-based medicines on the UK market') and enumerates the search axes: product, brand, strain name, or dose form. It clearly distinguishes itself from the sibling get_product by scope (search vs. one product in full).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative and the condition that selects it: 'For one product in full, use get_product with its slug.' It also implicitly frames this tool as the browse/search entry point when the user has only a name or dose form.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_strainsFind cannabis strainsARead-onlyIdempotentInspect
Find cannabis strain profiles by name or genetics (Indica, Sativa or Hybrid). Returns up to 25 strains with page URL, slug, genetics and THC and CBD ranges. A strain is a plant lineage, not something a pharmacy dispenses — use find_products for that. Findabis publishes no effects, medical uses or side effects for strains, so none are returned and none should be inferred. For terpenes, flavours and lineage, use get_listing with kind "strain".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many to return, 1-25. Default 10. | |
| query | No | Strain name or nickname, e.g. "Gelato". Omit to browse. | |
| genetics | No | The strain type: Indica, Sativa or Hybrid. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| total | Yes | How many matched in all; narrow the query when this exceeds the results |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description still adds real behavioral value by capping results at 25 and warning that effects/medical uses/side effects are absent and must not be inferred — an anti-hallucination guarantee not present in the schema or annotations. The enumerated return fields partially duplicate the output schema, keeping this from a 5.
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?
Four tight sentences, each doing distinct work: purpose, return shape, sibling disambiguation, and data-absence warning. The most important routing constraint (strain vs. product) is front-loaded before the caveats.
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 values need no explanation, and the description supplies everything else an agent needs: lookup keys, result cap, sibling routing, and explicit negative scope. Nothing required 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three params (query, genetics, limit) are documented, including the enum values. The description restates the name/genetics lookup but adds no syntax, format or default detail beyond the schema. Baseline 3 applies when the schema carries the parameter burden.
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 ('Find cannabis strain profiles') and immediately bounds the lookup key to name or genetics (Indica/Sativa/Hybrid). It explicitly disambiguates from siblings by declaring a strain is a plant lineage rather than a dispensed product, so an agent can separate it from find_products and get_listing without opening any 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?
Names two concrete alternatives with the condition that selects each: find_products for pharmacy-dispensed items, get_listing with kind "strain" for terpenes, flavours and lineage. It also defines negative scope ('no effects, medical uses or side effects'), removing the most likely wrong-side-of-the-fence questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listingGet one clinic, pharmacy, strain or brandRead-onlyIdempotentInspect
The public facts on one clinic, pharmacy, strain or brand page, by kind and the page slug from find_clinics, find_pharmacies, find_strains or search_findabis. Clinic: address, consultation types and fees, published price list, CQC rating, which patients its policy takes, partner pharmacies. Pharmacy: address, delivery and collection, delivery prices, GPhC registration, partner clinics. Strain: genetics, cannabinoid ranges, terpenes, flavours, lineage, products made from it. Brand: location, website and products. Not returned: stock, per-pharmacy medicine prices, staff, or anything about patients. For a product, use get_product.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | What the slug names: clinic, pharmacy, strain or brand. | |
| slug | Yes | The page slug from a find_* tool or search_findabis, e.g. "green-leaf-clinic". |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| kind | Yes | |
| name | Yes | |
| slug | Yes | |
| brand | No | |
| clinic | No | |
| strain | No | |
| pharmacy | No | |
| description | Yes | |
| descriptionAiAssisted | Yes |
get_productGet one product in fullARead-onlyIdempotentInspect
Everything public about one product, by its slug from find_products or search_findabis: dose form and strength, strain and brand, terpenes, what it contains (carrier oil, allergens, capsule shell), dosage and storage notes, patient leaflets and FAQs, and its price range across UK pharmacies when Findabis publishes one. Not returned: stock, pack sizes on offer, and which pharmacies dispense it at what price — the product page shows those only to patients and professionals with access. It describes the product, never who should take it.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The product page slug from find_products or search_findabis, e.g. "demo-kush-t20-c1". |
Output Schema
| Name | Required | Description |
|---|---|---|
| cbd | Yes | |
| thc | Yes | |
| url | Yes | |
| faqs | Yes | |
| form | Yes | Dose form as the page labels it, e.g. "Dried flower" |
| name | Yes | |
| slug | Yes | |
| brand | Yes | |
| image | Yes | |
| dosage | Yes | |
| strain | Yes | |
| storage | Yes | |
| category | Yes | |
| terpenes | Yes | |
| withheld | Yes | |
| allergens | Yes | |
| chemotype | Yes | THC-dominant, CBD-dominant or balanced, from the cannabinoid figures |
| documents | Yes | |
| carrierOil | Yes | |
| priceRange | Yes | Lowest to highest current price across UK pharmacies, naming none; null when not published |
| description | Yes | |
| capsuleShell | Yes | |
| discontinued | Yes | |
| oilFlowerEquivalence | Yes | |
| descriptionAiAssisted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing what is NOT returned (stock, pack sizes, per-pharmacy pricing) and why — those fields are gated to authenticated patients and professionals. The closing scope constraint ('describes the product, never who should take it') is exactly the kind of behavioral boundary an agent needs.
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 resource and scope in the first clause, then spends its remaining sentences on exclusions and boundaries that are genuinely load-bearing. The enumeration of returned fields is somewhat redundant given the output schema, but the prose stays tight and purposeful.
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 need not document return values, yet it still conveys the access model, exclusions, and scope limits. Nothing an agent needs to call this correctly 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 100% and the single slug parameter already carries its origin and an example, so the schema does the heavy lifting. The description reinforces the slug source but adds no new syntax or format detail beyond it.
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 ('Everything public about one product') and pins the identifier ('by its slug from find_products or search_findabis'), which cleanly separates it from the search/discovery siblings. An agent knows exactly what it retrieves 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?
It tells the agent where the required slug comes from (find_products or search_findabis), giving clear preconditions for use. It does not explicitly contrast with the sibling get_listing, so the routing guidance is strong but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_findabisSearch everythingARead-onlyIdempotentInspect
One text search across clinics, pharmacies, products, strains and brands. Use it when you do not yet know which kind the question is about, or to turn a name into a slug; then call the specific tool, which returns more detail. Returns names, kinds, slugs and page URLs only — no prices, stock or medical information.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Most results per kind, 1-20. Default 8. | |
| query | Yes | What to look for: a name, brand, strain, town or postcode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the read-only, idempotent, non-destructive, closed-world profile, so the safety bar is covered. The description adds genuine value beyond that by scoping the payload: 'Returns names, kinds, slugs and page URLs only — no prices, stock or medical information.' It stops short of describing result ordering or cross-kind merging behavior for the limit parameter, which is the remaining gap.
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 doing distinct work: scope of search, when to use it and what to do next, and what the response does and does not contain. The most decisive information (what it searches) is front-loaded with zero 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?
With an output schema present, the description needn't enumerate return fields, yet it still summarizes them and flags the notable exclusions. Combined with annotation coverage and a fully documented two-parameter schema, an agent has everything required to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'query' and 'limit' documented inline (including the 1-20 range and default 8), so the baseline of 3 applies. The description's mention of turning 'a name into a slug' hints at query intent but adds no syntax or format detail beyond what the schema already supplies.
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 — 'One text search across clinics, pharmacies, products, strains and brands' — and its breadth makes it immediately distinguishable from the narrower siblings find_clinics, find_products, etc. An agent can tell what it does 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?
Explicitly names the selection condition: 'Use it when you do not yet know which kind the question is about, or to turn a name into a slug; then call the specific tool, which returns more detail.' It gives both a when-to-use rule and the follow-up alternative, which is exactly the routing guidance needed against six sibling finders.
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.
4 tool updates
- Added
compare_providers - Changed
find_clinics14 fields changed- changed
Input schema / properties / acceptingPatients / descriptionPrevious value: -"Only clinics showing 'Accepting patients' (an active published eligibility policy)."New value: +"Only clinics showing 'Accepting patients' (an active published policy)." - added
Input schema / properties / conditionAdded value: +{ + "description": "Only clinics whose published policy lists this condition. One of: Anxiety / Depression; PTSD; Insomnia / Sleep disorders; Chronic pain; Neuropathic pain; Multiple Sclerosis / Spasticity; Cancer symptoms; IBD (Crohn's / Ulcerative Colitis); Migraine; Arthritis / inflammatory pain; ADHD / Autism spectrum symptoms; Endometriosis / women's health symptoms. A listed condition is the clinic's referral scope, never a statement that anyone qualifies.", + "maxLength": 120, + "type": "string" +} - added
Input schema / properties / consultationTypeAdded value: +{ + "description": "Only clinics offering ONLINE (video), IN_PERSON or PHONE.", + "enum": [ + "ONLINE", + "IN_PERSON", + "PHONE" + ], + "type": "string" +} - added
Input schema / properties / cqcAdded value: +{ + "description": "CQC rating filter; GOOD_OR_BETTER keeps Good and Outstanding.", + "enum": [ + "GOOD_OR_BETTER", + "OUTSTANDING", + "GOOD", + "REQUIRES_IMPROVEMENT", + "NOT_RATED" + ], + "type": "string" +} - added
Input schema / properties / maxFirstConsultationFeeAdded value: +{ + "description": "Only clinics whose first consultation costs at most this, in GBP.", + "exclusiveMinimum": 0, + "type": "number" +} - added
Input schema / properties / nearAdded value: +{ + "description": "A UK postcode, outcode or town, e.g. \"M1 1AE\", \"LS6\" or \"Bristol\". Sorts nearest first and adds miles.", + "maxLength": 64, + "minLength": 2, + "type": "string" +} - changed
Input schema / properties / patientType / descriptionPrevious value: -"NEW_PATIENT (never prescribed), TRANSFER (moving from another clinic) or ACTIVE_PATIENT (already under treatment). Leaves out clinics whose published policy does not take that type, and price sorts cost that route."New value: +"NEW_PATIENT, TRANSFER or ACTIVE_PATIENT. Drops clinics whose policy does not take it, and prices year one for that route." - changed
Input schema / properties / query / descriptionPrevious value: -"Clinic name, town or postcode, matched as text (not by distance). Omit to list all."New value: +"Clinic name, matched as text. For a place use `near`." - added
Input schema / properties / radiusMilesAdded value: +{ + "description": "Only within this many miles of `near`. Ignored without `near`.", + "exclusiveMinimum": 0, + "maximum": 500, + "type": "number" +} - changed
Input schema / properties / sort / descriptionPrevious value: -"az (default), za, or by published first-year cost: priceLowHigh / priceHighLow."New value: +"distance (default with `near`), az (default otherwise), za, cheapest / dearest by year-one clinic fees, rating." - changed
Input schema / properties / sort / enumPrevious value: -[ - "az", - "za", - "priceLowHigh", - "priceHighLow" -]New value: +[ + "distance", + "az", + "za", + "cheapest", + "dearest", + "rating" +] - added
Output schema / properties / results / items / properties / distanceMilesAdded value: +{ + "description": "Miles from `near`; null when no place was given", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / results / items / properties / firstYearClinicFeesAdded value: +{ + "description": "Estimated year-one clinic fees (consultations, membership, the clinic's prescription fee) for the asked patient type with 4 follow-ups and 12 prescriptions; never includes medicine; null when no price list is published", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "name", - "slug", - "url", - "city", - "postcode", - "currency", - "initialConsultationFee", - "followUpConsultationFee", - "consultationTypes", - "cqcRating", - "rating", - "acceptingPatients", - "patientTypes" -]New value: +[ + "name", + "slug", + "url", + "city", + "postcode", + "distanceMiles", + "currency", + "initialConsultationFee", + "followUpConsultationFee", + "firstYearClinicFees", + "consultationTypes", + "cqcRating", + "rating", + "acceptingPatients", + "patientTypes" +]
- Changed
find_pharmacies10 fields changed- added
Input schema / properties / collectionAdded value: +{ + "description": "Only pharmacies offering in-person collection.", + "type": "boolean" +} - changed
Input schema / properties / delivers / descriptionPrevious value: -"Only pharmacies that offer delivery."New value: +"Only pharmacies that deliver (most dispense UK-wide by post)." - added
Input schema / properties / minRatingAdded value: +{ + "description": "Only pharmacies with patient reviews averaging 3+ or 4+.", + "enum": [ + "3_plus", + "4_plus" + ], + "type": "string" +} - added
Input schema / properties / nearAdded value: +{ + "description": "A UK postcode, outcode or town, e.g. \"M1 1AE\", \"LS6\" or \"Bristol\". Sorts nearest first and adds miles.", + "maxLength": 64, + "minLength": 2, + "type": "string" +} - changed
Input schema / properties / query / descriptionPrevious value: -"Pharmacy name, town or postcode, matched as text (not by distance). Omit to list all."New value: +"Pharmacy name, matched as text. For a place use `near`." - added
Input schema / properties / radiusMilesAdded value: +{ + "description": "Only within this many miles of `near`. Ignored without `near`.", + "exclusiveMinimum": 0, + "maximum": 500, + "type": "number" +} - changed
Input schema / properties / sort / descriptionPrevious value: -"az (default), za, or by town."New value: +"distance (default with `near`), az (default otherwise), za, city, rating." - changed
Input schema / properties / sort / enumPrevious value: -[ - "az", - "za", - "city" -]New value: +[ + "distance", + "az", + "za", + "city", + "rating" +] - added
Output schema / properties / results / items / properties / distanceMilesAdded value: +{ + "description": "Miles from `near`; null when no place was given", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "name", - "slug", - "url", - "city", - "postcode", - "offersDelivery", - "offersCollection", - "rating" -]New value: +[ + "name", + "slug", + "url", + "city", + "postcode", + "distanceMiles", + "offersDelivery", + "offersCollection", + "rating" +]
- Changed
get_listing5 fields changed- added
Output schema / properties / clinic / properties / distanceMilesAdded value: +{ + "description": "Miles from `near`; null when no place was given", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / clinic / properties / firstYearClinicFeesAdded value: +{ + "description": "Estimated year-one clinic fees (consultations, membership, the clinic's prescription fee) for the asked patient type with 4 follow-ups and 12 prescriptions; never includes medicine; null when no price list is published", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / clinic / requiredPrevious value: -[ - "name", - "slug", - "url", - "city", - "postcode", - "currency", - "initialConsultationFee", - "followUpConsultationFee", - "consultationTypes", - "cqcRating", - "rating", - "acceptingPatients", - "patientTypes", - "address", - "website", - "pricingModel", - "priceList", - "cqcRegistration", - "cqcReportUrl", - "minimumAge", - "maximumAge", - "partnerPharmacies", - "otherLocations" -]New value: +[ + "name", + "slug", + "url", + "city", + "postcode", + "distanceMiles", + "currency", + "initialConsultationFee", + "followUpConsultationFee", + "firstYearClinicFees", + "consultationTypes", + "cqcRating", + "rating", + "acceptingPatients", + "patientTypes", + "address", + "website", + "pricingModel", + "priceList", + "cqcRegistration", + "cqcReportUrl", + "minimumAge", + "maximumAge", + "partnerPharmacies", + "otherLocations" +] - added
Output schema / properties / pharmacy / properties / distanceMilesAdded value: +{ + "description": "Miles from `near`; null when no place was given", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / pharmacy / requiredPrevious value: -[ - "name", - "slug", - "url", - "city", - "postcode", - "offersDelivery", - "offersCollection", - "rating", - "address", - "website", - "deliveryOptions", - "gphcNumber", - "gphcInspectionOutcome", - "gphcReportUrl", - "partnerClinics", - "otherLocations" -]New value: +[ + "name", + "slug", + "url", + "city", + "postcode", + "distanceMiles", + "offersDelivery", + "offersCollection", + "rating", + "address", + "website", + "deliveryOptions", + "gphcNumber", + "gphcInspectionOutcome", + "gphcReportUrl", + "partnerClinics", + "otherLocations" +]
7 tool updates
- Changed
find_clinics9 fields changed- removed
Input schema / properties / acceptingNewPatientsRemoved value: -{ - "description": "Only clinics currently taking new patients.", - "type": "boolean" -} - added
Input schema / properties / acceptingPatientsAdded value: +{ + "description": "Only clinics showing 'Accepting patients' (an active published eligibility policy).", + "type": "boolean" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Default 10."New value: +"How many to return, 1-25. Default 10." - added
Input schema / properties / patientTypeAdded value: +{ + "description": "NEW_PATIENT (never prescribed), TRANSFER (moving from another clinic) or ACTIVE_PATIENT (already under treatment). Leaves out clinics whose published policy does not take that type, and price sorts cost that route.", + "enum": [ + "NEW_PATIENT", + "TRANSFER", + "ACTIVE_PATIENT" + ], + "type": "string" +} - changed
Input schema / properties / query / descriptionPrevious value: -"Name, city or postcode. Postcode is matched as text, not by distance."New value: +"Clinic name, town or postcode, matched as text (not by distance). Omit to list all." - added
Input schema / properties / query / maxLengthAdded value: +120 - changed
Input schema / properties / sort / descriptionPrevious value: -"Default az."New value: +"az (default), za, or by published first-year cost: priceLowHigh / priceHighLow." - changed
Input schema / properties / sort / enumPrevious value: -[ - "az", - "priceLowHigh", - "priceHighLow" -]New value: +[ + "az", + "za", + "priceLowHigh", + "priceHighLow" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "note": { + "type": "string" + }, + "results": { + "items": { + "additionalProperties": false, + "properties": { + "acceptingPatients": { + "description": "Shows 'Accepting patients' (an active published eligibility policy)", + "type": "boolean" + }, + "city": { + "type": [ + "string", + "null" + ] + }, + "consultationTypes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "cqcRating": { + "type": [ + "string", + "null" + ] + }, + "currency": { + "type": "string" + }, + "followUpConsultationFee": { + "$ref": "#/properties/results/items/properties/initialConsultationFee" + }, + "initialConsultationFee": { + "description": "In `currency`; null when not published", + "type": [ + "number", + "null" + ] + }, + "name": { + "type": "string" + }, + "patientTypes": { + "anyOf": [ + { + "items": { + "enum": [ + "NEW_PATIENT", + "TRANSFER", + "ACTIVE_PATIENT" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Patient types the published policy takes; null when the clinic publishes no policy" + }, + "postcode": { + "type": [ + "string", + "null" + ] + }, + "rating": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "average": { + "type": "number" + }, + "count": { + "type": "integer" + } + }, + "required": [ + "average", + "count" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Published patient reviews; null when there are none" + }, + "slug": { + "type": [ + "string", + "null" + ] + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Canonical Findabis page, absolute; null when the listing has no page" + } + }, + "required": [ + "name", + "slug", + "url", + "city", + "postcode", + "currency", + "initialConsultationFee", + "followUpConsultationFee", + "consultationTypes", + "cqcRating", + "rating", + "acceptingPatients", + "patientTypes" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "description": "How many matched in all; narrow the query when this exceeds the results", + "type": "integer" + } + }, + "required": [ + "results", + "total" + ], + "type": "object" +}
- Changed
find_pharmacies6 fields changed- changed
Input schema / properties / delivers / descriptionPrevious value: -"Only pharmacies that deliver."New value: +"Only pharmacies that offer delivery." - changed
Input schema / properties / limit / descriptionPrevious value: -"Default 10."New value: +"How many to return, 1-25. Default 10." - changed
Input schema / properties / query / descriptionPrevious value: -"Name, city or postcode."New value: +"Pharmacy name, town or postcode, matched as text (not by distance). Omit to list all." - added
Input schema / properties / query / maxLengthAdded value: +120 - added
Input schema / properties / sortAdded value: +{ + "description": "az (default), za, or by town.", + "enum": [ + "az", + "za", + "city" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "note": { + "type": "string" + }, + "results": { + "items": { + "additionalProperties": false, + "properties": { + "city": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "offersCollection": { + "type": "boolean" + }, + "offersDelivery": { + "type": "boolean" + }, + "postcode": { + "type": [ + "string", + "null" + ] + }, + "rating": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "average": { + "type": "number" + }, + "count": { + "type": "integer" + } + }, + "required": [ + "average", + "count" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Published patient reviews; null when there are none" + }, + "slug": { + "type": [ + "string", + "null" + ] + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Canonical Findabis page, absolute; null when the listing has no page" + } + }, + "required": [ + "name", + "slug", + "url", + "city", + "postcode", + "offersDelivery", + "offersCollection", + "rating" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "description": "How many matched in all; narrow the query when this exceeds the results", + "type": "integer" + } + }, + "required": [ + "results", + "total" + ], + "type": "object" +}
- Changed
find_products7 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Dose form."New value: +"Dose form. CARTRIDGE is a vape cartridge." - changed
Input schema / properties / limit / descriptionPrevious value: -"Default 10."New value: +"How many to return, 1-25. Default 10." - changed
Input schema / properties / query / descriptionPrevious value: -"Product, brand or strain name."New value: +"Product, brand or strain name, e.g. \"Pink Kush\" or \"Tilray\". Omit to browse." - added
Input schema / properties / query / maxLengthAdded value: +120 - changed
Input schema / properties / sort / descriptionPrevious value: -"Default name_asc."New value: +"Alphabetical, name_asc (default) or name_desc." - changed
Input schema / properties / sort / enumPrevious value: -[ - "name_asc", - "price_asc", - "price_desc" -]New value: +[ + "name_asc", + "name_desc" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "note": { + "type": "string" + }, + "results": { + "items": { + "additionalProperties": false, + "properties": { + "brand": { + "type": [ + "string", + "null" + ] + }, + "category": { + "description": "Dose form: FLOWER, OIL, CAPSULE, EDIBLE, TOPICAL, CARTRIDGE or HASH", + "type": "string" + }, + "cbd": { + "description": "CBD content as the page prints it, unit included", + "type": [ + "string", + "null" + ] + }, + "discontinued": { + "type": "boolean" + }, + "latestPrice": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The latest price any UK pharmacy charged, naming no pharmacy; null when not published" + }, + "name": { + "type": "string" + }, + "slug": { + "type": [ + "string", + "null" + ] + }, + "thc": { + "description": "THC content as the page prints it, unit included", + "type": [ + "string", + "null" + ] + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Canonical Findabis page, absolute; null when the listing has no page" + } + }, + "required": [ + "name", + "slug", + "url", + "brand", + "category", + "thc", + "cbd", + "discontinued", + "latestPrice" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "description": "How many matched in all; narrow the query when this exceeds the results", + "type": "integer" + } + }, + "required": [ + "results", + "total" + ], + "type": "object" +}
- Changed
find_strains6 fields changed- changed
Input schema / properties / genetics / descriptionPrevious value: -"Indica, Sativa or Hybrid."New value: +"The strain type: Indica, Sativa or Hybrid." - added
Input schema / properties / genetics / enumAdded value: +[ + "Indica", + "Sativa", + "Hybrid" +] - changed
Input schema / properties / limit / descriptionPrevious value: -"Default 10."New value: +"How many to return, 1-25. Default 10." - changed
Input schema / properties / query / descriptionPrevious value: -"Strain name."New value: +"Strain name or nickname, e.g. \"Gelato\". Omit to browse." - added
Input schema / properties / query / maxLengthAdded value: +120 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "note": { + "type": "string" + }, + "results": { + "items": { + "additionalProperties": false, + "properties": { + "cbdPercent": { + "type": [ + "string", + "null" + ] + }, + "genetics": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "slug": { + "type": [ + "string", + "null" + ] + }, + "thcPercent": { + "description": "A figure or a range, e.g. \"18-22\"", + "type": [ + "string", + "null" + ] + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Canonical Findabis page, absolute; null when the listing has no page" + } + }, + "required": [ + "name", + "slug", + "url", + "genetics", + "thcPercent", + "cbdPercent" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "description": "How many matched in all; narrow the query when this exceeds the results", + "type": "integer" + } + }, + "required": [ + "results", + "total" + ], + "type": "object" +}
- Added
get_listing - Changed
get_product3 fields changed- changed
Input schema / properties / slug / descriptionPrevious value: -"The product page slug, e.g. \"demo-kush-t20-c1\"."New value: +"The product page slug from find_products or search_findabis, e.g. \"demo-kush-t20-c1\"." - added
Input schema / properties / slug / maxLengthAdded value: +200 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "allergens": { + "items": { + "type": "string" + }, + "type": "array" + }, + "brand": { + "type": [ + "string", + "null" + ] + }, + "capsuleShell": { + "$ref": "#/properties/brand" + }, + "carrierOil": { + "$ref": "#/properties/brand" + }, + "category": { + "type": "string" + }, + "cbd": { + "$ref": "#/properties/brand" + }, + "chemotype": { + "description": "THC-dominant, CBD-dominant or balanced, from the cannabinoid figures", + "type": [ + "string", + "null" + ] + }, + "description": { + "$ref": "#/properties/brand" + }, + "descriptionAiAssisted": { + "type": "boolean" + }, + "discontinued": { + "type": "boolean" + }, + "documents": { + "items": { + "additionalProperties": false, + "properties": { + "kind": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "title", + "kind", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "dosage": { + "$ref": "#/properties/brand" + }, + "faqs": { + "items": { + "additionalProperties": false, + "properties": { + "aiAssisted": { + "type": "boolean" + }, + "answer": { + "type": "string" + }, + "question": { + "type": "string" + } + }, + "required": [ + "question", + "answer", + "aiAssisted" + ], + "type": "object" + }, + "type": "array" + }, + "form": { + "description": "Dose form as the page labels it, e.g. \"Dried flower\"", + "type": [ + "string", + "null" + ] + }, + "image": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "oilFlowerEquivalence": { + "$ref": "#/properties/brand" + }, + "priceRange": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + } + }, + "required": [ + "min", + "max", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Lowest to highest current price across UK pharmacies, naming none; null when not published" + }, + "slug": { + "type": "string" + }, + "storage": { + "$ref": "#/properties/brand" + }, + "strain": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "genetics": { + "$ref": "#/properties/brand" + }, + "name": { + "type": "string" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "genetics", + "url" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "terpenes": { + "items": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "percent": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "name", + "percent" + ], + "type": "object" + }, + "type": "array" + }, + "thc": { + "$ref": "#/properties/brand" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "withheld": { + "type": "string" + } + }, + "required": [ + "name", + "slug", + "url", + "category", + "form", + "brand", + "thc", + "cbd", + "chemotype", + "discontinued", + "strain", + "terpenes", + "carrierOil", + "allergens", + "capsuleShell", + "priceRange", + "oilFlowerEquivalence", + "description", + "descriptionAiAssisted", + "dosage", + "storage", + "image", + "documents", + "faqs", + "withheld" + ], + "type": "object" +}
- Changed
search_findabis4 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Default 8 per kind."New value: +"Most results per kind, 1-20. Default 8." - changed
Input schema / properties / query / descriptionPrevious value: -"What to look for."New value: +"What to look for: a name, brand, strain, town or postcode." - added
Input schema / properties / query / maxLengthAdded value: +120 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "results": { + "items": { + "additionalProperties": false, + "properties": { + "kind": { + "enum": [ + "clinic", + "pharmacy", + "product", + "strain", + "brand" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": [ + "string", + "null" + ] + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Canonical Findabis page, absolute; null when the listing has no page" + } + }, + "required": [ + "kind", + "name", + "slug", + "url" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "results" + ], + "type": "object" +}
6 tool updates
- First observed
find_clinics - First observed
find_pharmacies - First observed
find_products - First observed
find_strains - First observed
get_product - First observed
search_findabis
Related MCP Connectors
GRADE-rated clinical evidence on cannabis as medicine (DE/EN). Search and cite studies.
Factual UK ADHD & autism assessment price and wait comparison. Read-only; not medical advice.
Licensed NY cannabis dispensaries, brands, deals, license checks and lab-anchored reviews. No auth.
Find and book UK private physiotherapy, osteopathy and chiropractic clinics, with live availability.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables querying the UK MHRA medicines register to search by product, brand, or active substance, retrieve all documents for a licence, and monitor recent changes to published medicines documents.228 npmMIT
- AlicenseNot gradedqualityBmaintenanceProvides access to the European Medicines Agency's public medicines register and related datasets, enabling search and monitoring of approved medicines, herbal substances, shortages, safety communications, referrals, and post-authorisation procedures.367 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides programmatic access to UK legal documents with hybrid semantic search and Model Context Protocol integration for AI assistants.73MIT

oro-intel-mcpofficial
AlicenseNot gradedqualityCmaintenanceUK public procurement data for AI agents. Tenders, contracts, buyer and supplier profiles over MCP and REST. 250 free credits.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.