@cargoffer/zbe-mcp
OfficialClick on "Install 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., "@@cargoffer/zbe-mcpCheck route from Madrid to Seville for my diesel van"
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.
@cargoffer/zbe-mcp
MCP (Model Context Protocol) server for checking vehicle routes against Low Emission Zones (ZBE/LEZ) in Spain and Portugal.
Quick Start
npx @cargoffer/zbe-mcpRelated MCP server: openroute-mcp
Tools
Tool | Description |
| Check if a vehicle route intersects ZBE polygons |
| List ZBE polygons with optional filters |
| Get coverage statistics |
| Get info about DGT environmental badges |
| Get vehicle access rules for a specific city |
Configuration
Environment Variable | Default | Description |
|
| ZBE API base URL |
| (none) | API key for authentication |
Claude Desktop Config
{
"mcpServers": {
"zbe": {
"command": "npx",
"args": ["@cargoffer/zbe-mcp"],
"env": {
"ZBE_API_KEY": "your-api-key"
}
}
}
}SDKs
TypeScript: @cargoffer/zbe-sdk
import { ZbeClient } from '@cargoffer/zbe-sdk';
const client = new ZbeClient({ apiKey: 'YOUR_KEY' });
const result = await client.checkRoute({...});Python: cargoffer-zbe
from zbe_client import ZbeClient
client = ZbeClient(api_key="YOUR_KEY")
result = await client.check_route(route=[...], vehicle={...})Links
Website: https://zbe.cargoffer.com
Report issues: https://github.com/cargoffer/zbe-mcp-server/issues
Available Tools
5 toolszbe.checkRouteA
Check if a vehicle route intersects Low Emission Zones (ZBE/LEZ) in Spain/Portugal. Use this when you need to know if a truck route passes through restricted urban areas. The API compares the vehicle's Euro emission class with each ZBE's minimum requirement. Returns which ZBEs are intersected and whether the vehicle is restricted from entering.
| Name | Required | Description | Default |
|---|---|---|---|
| route | Yes | Route GPS points as [{lat, lon}, ...] | |
| vehicle | Yes | Vehicle specifications |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description explains the core behavior: 'The API compares the vehicle's Euro emission class with each ZBE's minimum requirement. Returns which ZBEs are intersected and whether the vehicle is restricted from entering.' This adds useful context beyond the input schema, though it could mention error handling 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?
The description is composed of four efficient sentences: purpose, usage guidance, behavior, and return value. No redundant information; every sentence adds value.
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 no output schema, the description provides a high-level summary of returns ('which ZBEs are intersected and whether the vehicle is restricted'). It covers the essential aspects of the tool's functionality, though a bit more detail on the output structure would improve completeness.
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 input schema has 100% description coverage, so the baseline is 3. The description enhances meaning by explaining how the euroClass is used in comparison with ZBE requirements, and implies that weight and fuelType are relevant for the route check. This gives agents a better understanding of parameter roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'check' and resource 'vehicle route intersects Low Emission Zones (ZBE/LEZ)', with explicit geographic scope 'Spain/Portugal'. It is distinct from sibling tools like zbe.getBadgeInfo or zbe.listPolygons, which focus on different aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance: 'Use this when you need to know if a truck route passes through restricted urban areas.' While it does not explicitly list alternatives, the context is specific enough to differentiate from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zbe.getBadgeInfoA
Get information about DGT environmental badges (Distintivo Ambiental). Explains what each badge means, which vehicles qualify, and restrictions for each badge type.
| Name | Required | Description | Default |
|---|---|---|---|
| badge | No | Specific badge to look up (omit for all) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosure. It indicates a read-only information retrieval operation with no side effects. No mention of authentication, rate limits, or other behavioral traits, but sufficient for a simple lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, efficiently conveying the tool's purpose and parameter behavior. No unnecessary words, though it could be slightly more 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?
For a simple tool with one optional parameter and no output schema, the description adequately covers purpose and output nature. However, given sibling tools like getVehicleRestrictions, more detail on distinctions would improve completeness.
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%, providing a baseline of 3. The description adds value by explaining that omitting the parameter returns all badges, and that results include meaning, qualifications, and restrictions, which enhances understanding beyond the schema enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves information about DGT environmental badges, explaining meanings, qualifications, and restrictions. It is specific about the resource and purpose, though it does not explicitly differentiate from siblings like getVehicleRestrictions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (environmental badges) and notes that omitting the 'badge' parameter returns all badges. However, it does not provide explicit guidance on when to use this tool versus alternatives 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.
zbe.getStatsA
Get coverage statistics for the ZBE database. Returns total count, breakdown by country, and last update timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the tool returns statistics and their structure (total count, breakdown by country, timestamp), which is sufficient for a read-only stat tool. No mention of auth or side effects, but none are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the action and purpose. Every word adds value, with no redundancy.
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 no parameters, no output schema, and a simple retrieval task, the description fully informs the agent about what the tool does and what it returns. It is complete for its complexity.
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?
There are no parameters, so schema coverage is 100%. The baseline for zero parameters is 4, and the description adds no extra parameter info, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves coverage statistics for the ZBE database, with a specific verb ('Get') and resource. It also lists the returned data (total count, country breakdown, timestamp), making the purpose unmistakable.
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?
No explicit guidance on when to use this tool versus siblings, but the lack of parameters and the simple retrieval nature imply generic use for statistics. Sibling names like 'checkRoute' or 'getBadgeInfo' are distinct enough to avoid confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zbe.getVehicleRestrictionsA
Get specific vehicle access restrictions for a given city's ZBE. Useful when planning routes to understand what vehicles are allowed in each urban area.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City name to check | |
| country | No | Country code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states the tool's function without mentioning any behavioral traits such as idempotency, side effects, rate limits, or authentication requirements. The description lacks necessary transparency for safe invocation.
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 concise sentences with front-loaded purpose. No redundant information; every word contributes to clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description sufficiently states primary function and usage context. However, it does not mention the return format or any additional details, leaving some ambiguity about the response structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters ('City name to check', 'Country code'). The description adds no extra meaning beyond what the schema already provides, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves specific vehicle access restrictions for a city's ZBE, with distinct verb 'Get' and resource 'vehicle restrictions'. It distinguishes from sibling tools like 'checkRoute' (route planning) and 'getBadgeInfo' (badges), making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: 'Useful when planning routes to understand what vehicles are allowed in each urban area.' It implies when to use but does not explicitly exclude alternatives or compare to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zbe.listPolygonsA
List Low Emission Zone polygons with optional filters. Use this to browse available ZBEs, get their geometries, and see restriction details per city.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Filter by city name | |
| bounds | No | Bounding box: south,west,north,east | |
| country | No | Filter by country | |
| onlyRestricted | No | Only show ZBEs with active restrictions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the operation adequately (listing polygons with filters) but does not disclose potential behavioral details like pagination, error handling, or if it is read-only. For a simple list tool, this is acceptable but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and each sentence adds value. No extraneous information is present, making it concise and well-structured.
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?
There is no output schema, so the description should explain return values. It mentions 'geometries' and 'restriction details per city,' which gives some idea, but does not specify the format or structure of the output, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all four parameters have descriptions). The tool description adds no additional meaning beyond the schema. Per the guidelines, when coverage is high, the baseline is 3, and the description does not improve 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?
The description clearly states it lists Low Emission Zone polygons with optional filters, specifying the verb 'list' and the resource 'polygons'. It distinguishes from sibling tools like checkRoute or getBadgeInfo by focusing on browsing available ZBEs and getting geometries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to browse available ZBEs, get their geometries, and see restriction details per city,' providing clear context. However, it does not explicitly mention when not to use it or name alternatives, which would strengthen it given the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.1.0- First observed
zbe.checkRoute - First observed
zbe.getBadgeInfo - First observed
zbe.getStats - First observed
zbe.getVehicleRestrictions - First observed
zbe.listPolygons
TDQS
Each tool has a clear, distinct purpose: route checking, badge info, stats, city restrictions, and polygon listing. No overlap or ambiguity.
All tools follow a consistent camelCase verb_noun pattern (e.g., checkRoute, listPolygons), making them predictable and easy to understand.
Five tools is ideal for this domain, covering key operations without being too sparse or excessive. Each tool earns its place.
The tool set provides complete read-only coverage for querying ZBE data: route checking, city restrictions, polygon browsing, badge explanations, and database stats. No obvious gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Travel & Transportation
AI governance MCP server for EU AI Act compliance and jurisdiction verification
OSRM MCP — routing via the public demo server
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAI-powered route optimization MCP server for heavy vehicles and logistics. Calculate truck-optimized routes, predict traffic congestion with LSTM neural networks, compute toll costs, fuel costs and CO2 emissions, find truck stops and check weather along any European route.MIT
- AlicenseAqualityDmaintenanceMCP server for planning routes (hiking, biking, driving, etc.) using the OpenRouteService API. Provides tools to find coordinates, create routes with GPX/PNG/HTML output, search POIs, and compute reachable areas.62MIT
- AlicenseAqualityAmaintenanceMCP Server for Swiss road mobility — shared vehicles, EV charging, traffic alerts, Park & Rail, and multimodal trip planning.151MIT
- AlicenseNot gradedqualityAmaintenanceServidor MCP (roadmap L5) sobre los endpoints públicos de emap. No existe otro MCP de movilidad hiperlocal: búsqueda semántica local ES/EU, contexto de lugar, rutas multimodales con infraestructura propia (OSRM/OTP) y "el monte en transporte público".Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cargoffer/zbe-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server