rb209-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rb209-mcp What's the RB209 recommendation for winter wheat?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
rb209-mcp
MCP server exposing the AHDB RB209 (Nutrient Management Guide) Web API v2 — 94 tools — plus a nutrient-planning skill.
The three Users auth endpoints (Login / Logout / Refresh_Token) are deliberately
not exposed: the server manages that token lifecycle itself, so a tool call to
Logout could only ever invalidate its own session.
The extension ships its own usage guidance, so installing the .mcpb in Claude Desktop is enough — you don't need to load the skill separately. The server exposes an MCP instructions brief on connect, and the highest-risk tools (notably the recommendation endpoint) carry the must-know rules in their tool descriptions. skill/rb209-nutrient-planning/SKILL.md remains the fuller guide (for Claude Code / claude.ai and as a versioned release asset); the embedded guidance is a condensed subset kept in sync with it by hand.
Tools are a faithful passthrough to the API with one deliberate exception: the
recommendation endpoint has a footgun where a missing field.grass (which the
API's validation does not report) makes the call fail with the misleading
422 "…calculating the crop order". For that endpoint only, the server fills
the incidental required-empty sections (grass, grassland, organicMaterials,
mannerOutputs) when they are absent — never overwriting supplied data, and with
no effect on the result. See src/recommendationGuardrail.ts.
Requirements
You need your own AHDB RB209 Web API licence (register at https://rb209.ahdb.org.uk/Home/RequestAccess). Each user supplies their own credentials; they never leave your machine.
Related MCP server: nutrition-mcp
Install (non-technical — Claude Desktop)
Download
rb209-mcp.mcpbfrom the latest Release.Double-click it; Claude Desktop opens the installer.
Enter your RB209 email and password in the settings form.
Done — the RB209 tools appear in your chat tool.
Install (developers)
npm install && npm run build
RB209_EMAIL=you@example.com RB209_PASSWORD=secret node dist/index.jsAdd to an MCP client config with command: node, args: [".../dist/index.js"],
and env: { RB209_EMAIL, RB209_PASSWORD }.
Configuration
Env var | Required | Default | Purpose |
| yes | — | Your RB209 licence email |
| yes | — | Your RB209 licence password |
| no |
| API base URL |
| no | all | Comma-separated tags to expose (e.g. |
| no | vendored spec | Only set when running a manually-extracted bundle standalone (the .mcpb manifest wires it automatically) |
Development
npm test # unit tests (msw-mocked)
npm run test:watch
RB209_EMAIL=... RB209_PASSWORD=... npm test # also runs the live integration testThis server is released under the MIT Licence. The RB209 data it returns is licensed API content © AHDB under the Open Government Licence v3.0.
Available Tools
94 toolsrb209_advice_noteA
GET /api/AdviceNote/AdviceNote/{adviceNoteCode} — Individual advice note text filtered from the supplied corresponding advice note code.
Inputs: adviceNoteCode (required).
rb209_advice_note_advice_notesB
GET /api/AdviceNote/AdviceNotes — The full list of available advice notes.
Inputs: no named parameters.
rb209_advice_note_arable_eng_walA
GET /api/AdviceNote/ArableEngWal — The full list of available advice notes for England and Wales arable.
Inputs: no named parameters.
rb209_advice_note_arable_scotA
GET /api/AdviceNote/ArableScot — The full list of available advice notes for Scotland arable.
Inputs: no named parameters.
rb209_advice_note_grass_eng_walA
GET /api/AdviceNote/GrassEngWal — The full list of available advice notes for England and Wales grass.
Inputs: no named parameters.
rb209_advice_note_grass_scotA
GET /api/AdviceNote/GrassScot — The full list of available advice notes for Scotland grass.
Inputs: no named parameters.
rb209_advice_note_textB
GET /api/AdviceNote/AdviceNoteText/{countryId}/{adviceNoteCode} — Individual advice note text filtered from the supplied country id and advice note code.
Inputs: countryId (required), adviceNoteCode (required).
rb209_arable_crop_groupA
GET /api/Arable/CropGroup/{cropGroupId} — Individual crop group - filtered by crop group id.
Inputs: cropGroupId (required).
rb209_arable_crop_groupsA
GET /api/Arable/CropGroups — The full list of available crop groups.
Inputs: no named parameters.
rb209_arable_crop_info1B
GET /api/Arable/CropInfo1/{cropTypeId}/{cropInfo1Id} — Individual crop info 1 - filtered by crop type id and crop info 1 id.
Inputs: cropTypeId (required), cropInfo1Id (required).
rb209_arable_crop_info1sB
GET /api/Arable/CropInfo1s — The full list of available crop info 1s.
Inputs: no named parameters.
rb209_arable_crop_info1s_by_typeA
GET /api/Arable/CropInfo1s/{cropTypeId} — A filtered list of available crop info 1s - filtered by crop type id.
Inputs: cropTypeId (required).
rb209_arable_crop_info2A
GET /api/Arable/CropInfo2/{cropInfo2Id} — Individual crop info 2 - filtered by crop info 2 id (only required for arable cereals crops).
Inputs: cropInfo2Id (required).
rb209_arable_crop_info2sA
GET /api/Arable/CropInfo2s — The full list of available crop info 2s (only required for arable cereals crops).
Inputs: no named parameters.
rb209_arable_crop_typeB
GET /api/Arable/CropType/{cropTypeId} — Individual crop type - filtered by crop type id.
Inputs: cropTypeId (required).
rb209_arable_crop_typesB
GET /api/Arable/CropTypes — The full list of available crop types.
Inputs: no named parameters.
rb209_arable_crop_types_by_groupC
GET /api/Arable/CropTypes/{cropGroupId} — A filtered list of available crop types - filtered by crop group id.
Inputs: cropGroupId (required).
rb209_arable_default_yieldsB
GET /api/Arable/DefaultYields/{countryId} — Get the default yield data for the crops.
Inputs: countryId (required).
rb209_arable_potato_groupA
GET /api/Arable/PotatoGroup/{potatoGroupId} — Individual potato group - filtered by potato group id (only required for arable potato crops).
Inputs: potatoGroupId (required).
rb209_arable_potato_groupsA
GET /api/Arable/PotatoGroups — The full list of available potato groups (only required for arable potato crops).
Inputs: no named parameters.
rb209_arable_potato_varietiesB
GET /api/Arable/PotatoVarieties — The full list of available potato varieties (only required for arable potato crops).
Inputs: no named parameters.
rb209_arable_potato_varieties_by_groupA
GET /api/Arable/PotatoVarieties/{potatoGroupId} — A filtered list of available potato varieties - filtered by potato group id (only required for arable potato crops).
Inputs: potatoGroupId (required).
rb209_arable_potato_varietyB
GET /api/Arable/PotatoVariety/{potatoVarietyId} — Individual potato variety - filtered by potato variety id (only required for arable potato crops).
Inputs: potatoVarietyId (required).
rb209_fertiliser_prices_latest_pricesA
GET /api/FertiliserPrices/LatestPrices — Get the latest prices of fertilisers.
Inputs: no named parameters.
rb209_fertiliser_prices_request_accessB
POST /api/FertiliserPrices/RequestAccess — Request access to the fertiliser latest prices endpoint.
Inputs: body (required).
rb209_field_countriesA
GET /api/Field/Countries — The full list of available countries.
Inputs: no named parameters.
rb209_field_countryA
GET /api/Field/Country/{countryId} — Individual country text filtered from the supplied corresponding country id.
Inputs: countryId (required).
rb209_field_nutrientC
GET /api/Field/Nutrient/{nutrientId} — Individual nutrient text filtered from the supplied corresponding nutrient id.
Inputs: nutrientId (required).
rb209_field_nutrientsA
GET /api/Field/Nutrients — The full list of available nutrients.
Inputs: no named parameters.
rb209_field_second_crop_type_listA
GET /api/Field/SecondCropType_List/{cropGroupId1}/{cropTypeId1}/{cropGroupId2}/{countryId} — Some crops (both arable and grassland) allow a second crop to be sown in the same crop year: The filtered list of available second crop types after the first crop.
Inputs: countryId (required), cropTypeId1 (required), cropGroupId1 (required), cropGroupId2 (required).
rb209_field_site_classB
GET /api/Field/SiteClass/{siteClassId} — Site class of site class id provided.
Inputs: siteClassId (required).
rb209_field_site_classesC
GET /api/Field/SiteClasses/{countryId} — Site class list.
Inputs: countryId (required).
rb209_field_site_class_itemC
GET /api/Field/SiteClassItem/{soilTypeId}/{altitude}/{postcode}/{countryId} — Site class of field.
Inputs: altitude (required), postcode (required), countryId (required), soilTypeId (required).
rb209_field_typeA
GET /api/Field/FieldType/{fieldTypeId} — Individual field type text filtered from the supplied corresponding field type id.
Inputs: fieldTypeId (required).
rb209_field_typesA
GET /api/Field/FieldTypes/{countryId} — The full list of available field types. — You usually don't need this — fieldType is fixed: 1 = Arable & Horticulture, 2 = Grassland, 3 = Both. It only returns data for countryId 3.
Inputs: countryId (required).
rb209_grass_defoliation_sequenceA
GET /api/Grass/DefoliationSequence/{defoliationSequenceId} — Get the text of the defoliation sequence for the provided defoliation sequence id.
Inputs: defoliationSequenceId (required).
rb209_grass_defoliation_sequencesB
GET /api/Grass/DefoliationSequences/{swardTypeId}/{swardManagementId}/{numberOfCuts}/{newSward} — Deprecated - The list of different defoliation sequences available for grass fields.
Inputs: newSward (required), swardTypeId (required), numberOfCuts (required), swardManagementId (required).
rb209_grass_defoliation_sequences_by_countryC
GET /api/Grass/DefoliationSequences/{swardTypeId}/{swardManagementId}/{numberOfCuts}/{newSward}/{countryId} — The list of different defoliation sequences available for grass fields.
Inputs: newSward (required), countryId (required), swardTypeId (required), numberOfCuts (required), +1 more.
rb209_grass_growth_class_by_classA
GET /api/Grass/GrassGrowthClass/{grassGrowthClassId} — Individual grass growth class (GGC) text filtered from the supplied corresponding grass growth class id.
Inputs: grassGrowthClassId (required).
rb209_grass_growth_class_by_soil_type_rainfall_altitude_chalkB
GET /api/Grass/GrassGrowthClass/{soilTypeId}/{rainfall}/{altitude}/{chalk} — Calculate the grass growth class (GGC) for a grassland field.
Inputs: chalk (required), altitude (required), rainfall (required), soilTypeId (required).
rb209_grass_growth_classesB
GET /api/Grass/GrassGrowthClasses/{countryId} — Full list of available grass growth classes (GGC) for grassland fields.
Inputs: countryId (required).
rb209_grass_historiesB
GET /api/Grass/GrassHistories/{countryId} — Grass history list of grass fields.
Inputs: countryId (required).
rb209_grass_historyC
GET /api/Grass/GrassHistory/{grassHistoryId} — Grass history of grass history id provided.
Inputs: grassHistoryId (required).
rb209_grass_potential_cutsC
GET /api/Grass/PotentialCuts/{swardTypeId}/{swardManagementId} — The list of different number of cuts for the field.
Inputs: swardTypeId (required), swardManagementId (required).
rb209_grass_seasonC
GET /api/Grass/GrassSeason/{seasonId} — This endpoint is used to return grass season.
Inputs: seasonId (required).
rb209_grass_seasonsC
GET /api/Grass/GrassSeasons/{countryId} — This endpoint is used to return grass seasons.
Inputs: countryId (required).
rb209_grass_site_class_idA
GET /api/Grass/SiteClassId/{soilTypeId}/{rainfall}/{altitude} — Calculate the site class id for Scottish grassland fields.
Inputs: altitude (required), rainfall (required), soilTypeId (required).
rb209_grass_sward_managementA
GET /api/Grass/SwardManagement/{swardManagementId} — Get the text of the sward management for the provided sward management id.
Inputs: swardManagementId (required).
rb209_grass_sward_managementsA
GET /api/Grass/SwardManagements — The list of different sward managements available for grass fields.
Inputs: no named parameters.
rb209_grass_sward_managements_by_typeA
GET /api/Grass/SwardManagements/{swardTypeId} — The list of different sward managements available for the provided sward type.
Inputs: swardTypeId (required).
rb209_grass_sward_typeB
GET /api/Grass/SwardType/{swardTypeId} — Get the text of the sward type for the provided sward type id.
Inputs: swardTypeId (required).
rb209_grass_sward_typesA
GET /api/Grass/SwardTypes — The list of different sward types available for grass fields.
Inputs: no named parameters.
rb209_grass_yield_ranges_england_and_walesA
GET /api/Grass/YieldRangesEnglandAndWales/{sequenceId}/{grassGrowthClassId} — The list of yield ranges for grass fields in England and Wales.
Inputs: sequenceId (required), grassGrowthClassId (required).
rb209_grass_yield_ranges_scotlandB
GET /api/Grass/YieldRangesScotland/{sequenceId}/{siteClassId} — The list of yield ranges for grass fields in Scotland.
Inputs: sequenceId (required), siteClassId (required).
rb209_measurement_crop_heightsA
GET /api/Measurement/CropHeights — Full list of available crop heights.
Inputs: no named parameters.
rb209_measurement_green_area_indexesA
GET /api/Measurement/GreenAreaIndexes — Full list of available green area indexes.
Inputs: no named parameters.
rb209_measurement_methodA
POST /api/Measurement/MeasurementMethod — The endpoint to calculate sns index using the measurement method in England & Wales.
Inputs: body (required).
rb209_measurement_scotland_measurement_methodA
POST /api/MeasurementScotland/MeasurementMethod — The endpoint to calculate residue group using SMN measurement values in Scotland.
Inputs: body (required).
rb209_measurement_seasonsA
GET /api/Measurement/Seasons — Full list of available seasons.
Inputs: no named parameters.
rb209_measurement_shoot_numbersA
GET /api/Measurement/ShootNumbers — Full list of available shoot numbers.
Inputs: no named parameters.
rb209_measurement_smn_conversion_methodC
GET /api/Measurement/SmnConversionMethod/{smnValue}/{soilLayer} — The get smn value to be converted from N/kg to kg/ha.
Inputs: smnValue (required), soilLayer (required).
rb209_organic_material_categoriesB
GET /api/OrganicMaterial/OrganicMaterialCategories — This endpoint is used to return organic material categories.
Inputs: no named parameters.
rb209_organic_material_category_itemB
GET /api/OrganicMaterial/OrganicMaterialCategoryItem/{organicMaterialCategoryId} — This endpoint is used to return organic material category item.
Inputs: organicMaterialCategoryId (required).
rb209_organic_material_incorporation_methodB
GET /api/OrganicMaterial/IncorporationMethod/{incorporationMethodId} — Organic material incorporation method item based on incorporation method id.
Inputs: incorporationMethodId (required).
rb209_organic_material_incorporation_methodsA
GET /api/OrganicMaterial/IncorporationMethods — Organic material incorporation method list.
Inputs: no named parameters.
rb209_organic_material_incorporation_methods_by_typeB
GET /api/OrganicMaterial/IncorporationMethods/{organicMaterialTypeId} — Organic material incorporation method list based on organicMaterialTypeId.
Inputs: organicMaterialTypeId (required).
rb209_organic_material_type_itemA
GET /api/OrganicMaterial/OrganicMaterialTypeItem/{organicMaterialTypeId} — This endpoint is used to return organic material type of organic material type id provided.
Inputs: organicMaterialTypeId (required).
rb209_organic_material_type_item_by_dry_matter_splitC
GET /api/OrganicMaterial/OrganicMaterialTypeItem/{organicMaterialTypeId}/{dryMatterSplit} — This endpoint is used to return organic material type item for provided organicMaterialTypeId and dryMatterSplit.
Inputs: dryMatterSplit (required), organicMaterialTypeId (required).
rb209_organic_material_typesB
GET /api/OrganicMaterial/OrganicMaterialTypes — This endpoint used to return organic material types.
Inputs: no named parameters.
rb209_organic_material_types_by_categoryB
GET /api/OrganicMaterial/OrganicMaterialTypes/{organicMaterialCategoryId} — This endpoint used to return organic material types for provided organicMaterialCategoryId.
Inputs: organicMaterialCategoryId (required).
rb209_organic_material_types_by_category_dry_matter_splitA
GET /api/OrganicMaterial/OrganicMaterialTypes/{organicMaterialCategoryId}/{dryMatterSplit} — This endpoint used to return organic material types for provided organicMaterialCategoryId and dryMatterSplit.
Inputs: dryMatterSplit (required), organicMaterialCategoryId (required).
rb209_organic_material_types_by_dry_matter_splitB
GET /api/OrganicMaterial/OrganicMaterialTypes/{dryMatterSplit} — This endpoint used to return organic material types based on filter.
Inputs: dryMatterSplit (required).
rb209_previous_cropping_previous_grassA
GET /api/PreviousCropping/PreviousGrass/{previousGrassId} — Individual previous grass - filtered by previous grass id.
Inputs: previousGrassId (required).
rb209_previous_cropping_previous_grassesA
GET /api/PreviousCropping/PreviousGrasses — The full list of available previous grasses.
Inputs: no named parameters.
rb209_rainfall_averageA
GET /api/Rainfall/RainfallAverage/{postcode} — Average rainfall of the field across the whole year.
Inputs: postcode (required).
rb209_rainfall_summer_rainfall_averageA
GET /api/Rainfall/SummerRainfallAverage/{postcode} — Average rainfall of the field during the summer months (April - September).
Inputs: postcode (required).
rb209_rainfall_winter_rainfall_averageA
GET /api/Rainfall/WinterRainfallAverage/{postcode} — Average rainfall of the field during the winter months (October - March).
Inputs: postcode (required).
rb209_recommendation_calculate_nutrient_deficiencyC
GET /api/Recommendation/CalculateNutrientDeficiency/{cropTypeId}/{leafSamplingPosition}/{nutrientId}/{nutrientContent} — To get the nutrient deficiency result bases on leaf analysis.
Inputs: cropTypeId (required), nutrientId (required), nutrientContent (required), leafSamplingPosition (required).
rb209_recommendation_calculate_nutrient_offtakeC
POST /api/Recommendation/CalculateNutrientOfftake — The calculate crop nutrient offtake value.
Inputs: body (required).
rb209_recommendation_recommendationsA
POST /api/Recommendation/Recommendations — The main connection to calculate nutrient recommendations. — Before calling, collect ALL inputs from the user — do not assume rainfall, sowing date, yield or straw handling; get rainfall from a postcode via rb209_rainfall_average. Call this ONCE — it returns every nutrient you enable in nutrients (N, P2O5, K2O, MgO, SO3, lime); do not call it per-nutrient or repeat it. For an ARABLE field the body MUST include field.grass = {} AND field.grassland = {} (both empty objects) alongside field.arable = [ ... ]; a missing field.grass causes the misleading 422 '…calculating the crop order', not a 'grass required' error (this server auto-fills them, but be explicit). No soil analysis? send field.soil.soilAnalyses = [] and skip the soil index/methodology lookups. cropInfo2Id (1 = straw baled/removed, 2 = straw incorporated) strongly affects K — always ask the user. Resolve all IDs from the lookup tools.
Inputs: body (required).
rb209_soil_methodologiesB
GET /api/Soil/Methodologies/{nutrientId}/{countryId} — A filtered list of available soil methodologies - filtered by nutrient id and country id.
Inputs: countryId (required), nutrientId (required).
rb209_soil_methodologyB
GET /api/Soil/Methodology/{nutrientId}/{methodologyId} — Individual soil methodology - filtered by nutrient id and methodology id.
Inputs: nutrientId (required), methodologyId (required).
rb209_soil_nutrient_index_by_indexC
GET /api/Soil/NutrientIndex/{nutrientId}/{indexId} — Individual nutrient index item - filtered by nutrient id and index id.
Inputs: indexId (required), nutrientId (required).
rb209_soil_nutrient_index_by_value_methodologyB
GET /api/Soil/NutrientIndex/{nutrientId}/{nutrientValue}/{methodologyId} — Individual nutrient index item - filtered by nutrient id, nutrient value and methodology id.
Inputs: nutrientId (required), methodologyId (required), nutrientValue (required).
rb209_soil_nutrient_index_by_value_methodology_countryA
GET /api/Soil/NutrientIndex/{nutrientId}/{nutrientValue}/{methodologyId}/{countryId} — Individual nutrient index item - filtered by nutrient id, nutrient value, methodology id and country Id.
Inputs: countryId (required), nutrientId (required), methodologyId (required), nutrientValue (required).
rb209_soil_nutrient_indexesA
GET /api/Soil/NutrientIndexes/{methodologyId} — A list of the available nutrient indexes across nutrients - filtered by methodology id. — Returns T04 'No nutrient indexes found' for many nutrient/methodology combos. If the user has no soil analysis, skip it and send soilAnalyses: []; only convert a measured value via the NutrientIndexIdFromValue tool.
Inputs: methodologyId (required), nutrientId.
rb209_soil_nutrient_index_id_from_valueC
GET /api/Soil/NutrientIndexIdFromValue/{nutrientId}/{methodologyId}/{nutrientValue}/{countryId} — Individual nutrient index id - filtered by nutrient id, methodology id and nutrient value.
Inputs: countryId (required), nutrientId (required), methodologyId (required), nutrientValue (required).
rb209_soil_nutrient_indicesB
GET /api/Soil/NutrientIndices/{nutrientId}/{methodologyId}/{countryId} — A filtered list of available nutrient indexes - filtered by nutrient id, methodology id and country id.
Inputs: countryId (required), nutrientId (required), methodologyId (required).
rb209_soil_nutrient_target_indexC
GET /api/Soil/NutrientTargetIndex/{cropGroupId}/{nutrientId}/{countryId} — Get the nutrient target index.
Inputs: countryId (required), nutrientId (required), cropGroupId (required).
rb209_soil_nvz_action_programB
GET /api/Soil/NvzActionProgram/{countryId} — The full list of NVZ action program.
Inputs: countryId (required).
rb209_soil_ph_recommendationB
GET /api/Soil/SoilPhRecommendation/{soilTypeId}/{countryId} — Get list of soil ph recommendation level.
Inputs: countryId (required), soilTypeId (required).
rb209_soil_pscB
GET /api/Soil/SoilPsc/{cropGroupId}/{pIndexId} — Get the list of all available PSC for selected crop group.
Inputs: pIndexId (required), cropGroupId (required).
rb209_soil_typeA
GET /api/Soil/SoilType/{soilTypeId} — Individual soil type - filtered by soil type id.
Inputs: soilTypeId (required).
rb209_soil_typesB
GET /api/Soil/SoilTypes — The full list of available soil types.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 94 tools
The set has many near-identical lookup families—e.g., at least four soil nutrient-index-by-value variants and multiple organic-material-type filters—so an agent must parse subtle parameter differences to avoid misselection. Singular/plural pairs and a deprecated endpoint duplicated by a country-aware version further blur boundaries.
All tools share a uniform `rb209_<area>_<resource>` snake_case pattern, which is predictable. However, naming is inconsistent at the resource level: `soil_nutrient_indices` vs `soil_nutrient_indexes` are both present, singular and plural forms are mixed, and some names are awkwardly long (`rb209_grass_growth_class_by_soil_type_rainfall_altitude_chalk`).
94 tools is an extreme tool count for an MCP server, far beyond the point where an agent can reliably choose. Many endpoints are trivial singular/plural pairs or filter variants that could be collapsed into parameterized tools, so this feels like a direct API surface dump rather than a curated tool set.
For the RB209 nutrient-recommendation domain, the tool surface is remarkably complete: it includes the main recommendation calculator plus lookups for crops, grass, soil, organic materials, rainfall, measurements, previous cropping, and fertiliser prices. There are no obvious dead-end workflows; even caveats around no-soil-analysis and country-specific paths are covered.
Maintenance
Related MCP Connectors
MCP server exposing supplements database used by iNutriPlan.com
MCP server for the Seline Analytics API
Public, read-only MCP server for FarmNeural company facts, packages, and capabilities.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for agriculture and farming data. 8 tools: soil conditions (temperature, moisture), crop weather forecasts, historical climate data (NASA POWER, since 1981), global agriculture statistics (World Bank, 20+ indicators), and food product database (Open Food Facts, 3M+ products). All APIs free, no keys required.820 PyPI1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for USDA nutrition data lookup, meal logging, and daily macro tracking.65 npmMIT
- AlicenseCqualityCmaintenanceMCP server for the UK Bus Open Data Service, enabling timetable queries, stop search, route discovery, journey planning, and real-time bus tracking.1622 PyPIMIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Esheria Regulatory Pack API, enabling regulatory intelligence tools such as health checks, pack discovery, obligations, penalties, and citation-backed compliance workflows.Apache 2.0