Skip to main content
Glama
gander-tools

OpenStreetMap Tagging Schema MCP Server

by gander-tools

OpenStreetMap Tagging Schema MCP Server

Test Fuzzing Release Docker

npm downloads GitHub Release

TypeScript MCP SDK OSM Schema

Code Quality NPM Provenance SLSA 3

License: GPL-3.0 Last Commit GitHub Issues GitHub PRs

MCP Badge

What is this?

This is a Model Context Protocol (MCP) server designed specifically for AI agents and LLM applications. It acts as a bridge between artificial intelligence systems and the comprehensive OpenStreetMap tagging knowledge base provided by the official @openstreetmap/id-tagging-schema library.

Current Status: Production-ready MCP server, actively maintained and continuously improved. The service is deployed and accessible at https://mcp.gander.tools/osm-tagging/.

We welcome your feedback! Have ideas for improvements? Found a bug? Want to discuss features? Please open an issue or start a discussion.

Related MCP server: OSM Edit MCP Server

What this is NOT

โš ๏ธ Important clarifications:

  • Not a standalone application: This server requires integration with AI systems (like Claude Code or Claude Desktop) to be useful. It has no user interface or web frontend.

  • Not for direct human use: Without an AI agent as an intermediary, this tool provides no value to end users. It's designed exclusively for programmatic access by LLM applications.

  • Not a public API for general use: The deployed service at mcp.gander.tools is intended for integration with AI agents, not for direct HTTP requests or high-volume automated queries. Please do not attempt to abuse the service with DDoS attacks or excessive traffic.

If you're looking for a user-facing OSM tagging tool, consider iD editor or JOSM instead.

Features

7 MCP Tools organized into 3 categories:

  • Tag Query (2 tools): Query tag values and search tags

  • Preset Discovery (2 tools): Search and explore OSM presets with detailed configurations

  • Validation (3 tools): Validate tags, check for deprecated tags, suggest improvements

๐Ÿ“– Full tool reference: docs/api/

Installation

# No installation needed - run directly
npx @gander-tools/osm-tagging-schema-mcp

Using Docker

# Run with stdio transport
docker run -i ghcr.io/gander-tools/osm-tagging-schema-mcp:latest

๐Ÿ“– More options: docs/user/installation.md (source installation, verification, troubleshooting)

Quick Start

With Claude Code CLI

# Add to Claude Code
claude mcp add --transport stdio osm-tagging-schema -- npx -y @gander-tools/osm-tagging-schema-mcp

# Use in conversations
# Ask Claude: "What OSM tags are available for restaurants?"
# Ask Claude: "Validate these tags: amenity=parking, capacity=50"

With Claude Desktop

Add to your Claude Desktop configuration:

{
  "mcpServers": {
    "osm-tagging-schema": {
      "command": "npx",
      "args": ["@gander-tools/osm-tagging-schema-mcp"]
    }
  }
}

๐Ÿ“– Next steps:

Testing with MCP Inspector

Test and debug the server using the official MCP Inspector:

# Test published package (quickest)
npx @modelcontextprotocol/inspector npx @gander-tools/osm-tagging-schema-mcp

# Test Docker image
npx @modelcontextprotocol/inspector docker run --rm -i ghcr.io/gander-tools/osm-tagging-schema-mcp

The Inspector provides an interactive web UI to test all tools, inspect responses, and debug issues.

๐Ÿ“– Complete inspection guide: docs/development/inspection.md (includes HTTP transport testing)

Development

Built with Test-Driven Development (TDD) and Property-Based Fuzzing:

  • Comprehensive test suite (unit + integration) with 100% pass rate

  • Property-based fuzz tests with fast-check for edge case discovery

  • Continuous fuzzing in CI/CD (weekly schedule + on every push/PR)

npm install      # Install dependencies
npm test         # Run all tests
npm run test:fuzz # Run fuzz tests
npm run build    # Build for production

๐Ÿ“– Development guides: docs/development/development.md | docs/development/fuzzing.md

Contributing

Contributions welcome! This project follows Test-Driven Development (TDD).

  1. Fork and clone the repository

  2. Install dependencies: npm install

  3. Create a feature branch

  4. Write tests first, then implement

  5. Ensure all tests pass: npm test

  6. Submit a pull request

๐Ÿ“– Guidelines: docs/development/contributing.md

Documentation

Quick Navigation

Choose your path:

I want to...

Go to

Install and run the server

Installation Guide

Configure with Claude Code/Desktop

Configuration Guide

Learn how to use the tools

Usage Guide โ†’ API Reference

Test and debug the server

Inspection Guide

Deploy in production (HTTP/Docker)

Deployment Guide

Fix issues or errors

Troubleshooting Guide

Contribute to the project

Contributing Guide

Complete Documentation

User Guides:

Developer Docs:

Deployment Docs:

  • Deployment - HTTP/Docker production deployment

  • Security - Security features, provenance, and SLSA

Project Info:

License

GNU General Public License v3.0 - See LICENSE file for details.

Available Tools

10 tools
compare_tagsCompare TagsA

Compare two sets of OpenStreetMap tags to identify differences, additions, deletions, and modifications. Performs detailed tag-level comparison showing which tags were added, removed, or changed between two versions. Provides human-readable names for all tags and values using the OSM tagging schema. Use this for reviewing tag changes, understanding feature modifications, analyzing tag history, or validating tag transformations. Returns structured diff with localized names for better readability.

ParametersJSON Schema
NameRequiredDescriptionDefault
newTagsYesThe new/updated set of tags to compare to. Accepts either JSON object format ({"amenity": "restaurant"}) or flat text format (amenity=restaurant\nname=New Name). This represents the "after" state in the comparison.
oldTagsYesThe original/old set of tags to compare from. Accepts either JSON object format ({"amenity": "cafe"}) or flat text format (amenity=cafe\nname=Old Name). This represents the "before" state in the comparison.
optionsNoOptions to control comparison output: 'showUnchanged' includes unchanged tags in the output (default: false), 'format' controls output format.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description discloses key behaviors: it performs a read-only comparison, provides human-readable names using OSM schema, and returns structured diff. It also explains options like diffFormat and showUnchanged, giving a clear picture of what the tool does and how its output can be controlled.

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

Conciseness4/5

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

The description is two sentences plus a list of use cases. It is front-loaded with the core purpose. While it could be slightly more concise, it efficiently conveys necessary information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 3 parameters, nested objects, no output schema, and no annotations. The description covers purpose, usage, behavior, and parameter options. It mentions 'returns structured diff' but does not detail the exact structure; however, the options help infer the output. Most aspects are adequately addressed.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds context about accepted formats (JSON or flat text) and diff formats, but these are already covered in the schema descriptions. The description does not introduce new parameter meaning beyond what's in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool compares two sets of OSM tags and identifies differences, additions, deletions, and modifications. It specifies the verb 'compare' and the resource 'OpenStreetMap tags', and it is distinct from sibling tools like flat_to_json or validate_tag.

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

Usage Guidelines4/5

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

The description explicitly lists use cases: reviewing tag changes, understanding feature modifications, analyzing tag history, and validating tag transformations. However, it does not mention when not to use this tool or suggest alternative tools for other tag operations.

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

flat_to_jsonConvert Flat Text to JSONA

Convert OpenStreetMap tags from flat text format (key=value per line) to JSON object format. This is an INPUT CONVERTER for AI workflows - use it FIRST when you receive tags in flat text format and need to work with them as a JSON object. Handles various text formats including key=value pairs (one per line), whitespace variations, empty lines, and comments (lines starting with #). Returns a clean JSON object with all parsed tags. Essential for processing OSM data from text exports, iD editor output, or JOSM exports.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYesTags in flat text format with key=value pairs, one per line (e.g., "amenity=restaurant\nname=Test Cafe\ncuisine=italian"). Empty lines and lines starting with # are ignored. Whitespace around keys and values is trimmed automatically.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description fully covers behavioral traits: 'Handles various text formats including key=value pairs (one per line), whitespace variations, empty lines, and comments (lines starting with #). Returns a clean JSON object with all parsed tags.' It discloses input handling and output, but does not mention error handling or limits.

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

Conciseness4/5

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

The description is a single paragraph of 4 sentences, front-loaded with the core purpose. It is informative without unnecessary words, though slightly more structure (e.g., bullet points) could improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple converter with one parameter and full schema coverage, the description provides sufficient context: input format, handling of various text artifacts, and output. It could mention the JSON structure (e.g., object with keys/values), but it's mostly complete.

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

Parameters4/5

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

The description adds meaning beyond the schema by explaining the expected format (key=value per line) and noting that empty lines, comments, and whitespace are handled. Since schema coverage is 100%, the description complements it well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Convert OpenStreetMap tags from flat text format... to JSON object format.' It uses specific verb 'Convert', specifies resource 'OpenStreetMap tags', and distinguishes itself as an input converter for AI workflows, differentiating from sibling tools like 'json_to_flat'.

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

Usage Guidelines4/5

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

The description explicitly says 'use it FIRST when you receive tags in flat text format and need to work with them as a JSON object.' It provides clear context for when to use the tool, though it does not explicitly mention when not to use it or alternative tools.

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

get_preset_detailsGet Preset DetailsA

Get complete detailed information about a specific OpenStreetMap preset. Presets are feature templates that define standard tagging patterns (e.g., the 'Restaurant' preset defines amenity=restaurant and lists fields like cuisine, outdoor_seating, etc.). Returns comprehensive preset information including: display name, all required and suggested tags, supported geometry types, complete list of fields (with template expansion), field types and options, and parent/child preset relationships. Use this to understand exactly how to tag a specific feature type, learn what fields are available for a preset, or get example values for proper tagging.

ParametersJSON Schema
NameRequiredDescriptionDefault
presetIdYesThe preset identifier to retrieve (e.g., 'amenity/restaurant', 'highway/residential', 'natural/tree'). Preset IDs follow the pattern 'key/value' corresponding to the primary tag. Use search_presets to find preset IDs.

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It lists all returned information categories (tags, fields, geometry types, parent/child), sufficiently disclosing what to expect. No contradictions.

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

Conciseness4/5

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

The description is front-loaded with the main purpose, then explains presets, then lists what is returned, then usage. It is slightly verbose but well-structured and informative without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately covers return values (tags, fields, geometry types, parent/child). It might miss mentioning any pagination or error conditions, but for a simple retrieval tool it is mostly complete.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3). The description adds value by explaining the preset ID pattern (key/value) and giving examples (e.g., 'amenity/restaurant'), and referencing search_presets for finding IDs. This goes beyond simple schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves detailed information about an OpenStreetMap preset, explains what a preset is, and lists the comprehensive information returned. It distinguishes from siblings like search_presets (which finds IDs) by focusing on details retrieval.

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

Usage Guidelines4/5

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

The description provides clear use cases: understanding tagging, learning available fields, getting example values. It implicitly contrasts with search_presets for finding IDs but does not explicitly state when not to use or list alternatives beyond the sibling tools context.

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

get_tag_valuesGet Tag ValuesA

Retrieve all possible values for a specific OpenStreetMap tag key, with localized human-readable names for both the key and each value. This tool searches through the OSM tagging schema (both predefined field options and preset definitions) to find every documented value that can be used with the specified key. Returns four pieces of information: the normalized key name, localized key display name, a simple array of all values, and a detailed array with localized names for each value. Use this to discover what values are available for a tag (e.g., all amenity types), learn the proper terminology for values, or build UI selection lists. Essential for understanding OSM's controlled vocabularies.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagKeyYesThe OpenStreetMap tag key to retrieve values for (e.g., 'amenity', 'building', 'highway', 'natural', 'shop'). Supports both simple keys and namespaced keys with colons (e.g., 'addr:street', 'name:en'). The tool will search both field definitions and preset tags to find all documented values. Case-sensitive, use lowercase for standard OSM keys.
optionsNoOptions to control query output: 'limit' restricts the maximum number of values returned (useful for tags with many values like 'name').

TDQS

A4.6/5.0
Behavior5/5

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

Despite no annotations, the description fully discloses behavioral traits: it searches both predefined field options and preset definitions, supports simple and namespaced keys, is case-sensitive, and returns four specific pieces of information. This goes well beyond the basic operation, providing rich behavioral context.

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

Conciseness4/5

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

The description is information-dense and each sentence contributes value, starting with the primary action. It could be slightly shorter by removing redundant phrases like 'to find every documented value' after already stating the schema search, but overall it's well-structured and not excessively verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description thoroughly explains the return format (four pieces of information). It covers all important aspects: search scope, key types, case-sensitivity, and parameter usage. The parameter count and high schema coverage are fully leveraged, making the description self-sufficient.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value beyond schema by giving examples for tagKey (e.g., 'amenity', 'addr:street'), explaining case-sensitivity, and for options.limit, it clarifies purpose and performance benefit. This extra guidance elevates the score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific verb 'Retrieve' and resource 'all possible values for a specific OpenStreetMap tag key'. It differentiates from sibling tools like search_tags (which searches across tags) and get_preset_details (which focuses on presets) by focusing on enumerating all documented values for a single key, making its unique purpose unmistakable.

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

Usage Guidelines4/5

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

The description explicitly lists three use cases: discovering available values, learning terminology, and building UI lists. It also implies when to use it (e.g., 'Essential for understanding OSM's controlled vocabularies'). However, it does not provide explicit when-not-to-use scenarios or compare alternatives, though the context is clear enough.

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

json_to_flatConvert JSON to Flat TextA

Convert OpenStreetMap tags from JSON object format to flat text format (key=value per line). This is an OUTPUT CONVERTER for AI workflows - use it LAST when you need to present tags in a human-readable text format or export them for use in other tools. Produces clean, consistent key=value format with one tag per line, sorted alphabetically by key. Use this for generating human-readable tag lists, exporting to OSM editors, or sharing tag collections. The output format is compatible with JOSM, iD editor imports, and other OSM tools that accept flat text tag format.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYesTags as a JSON object (e.g., {"amenity": "restaurant", "name": "Test Cafe", "cuisine": "italian"}). All values must be strings. The output will be formatted as key=value pairs, one per line, sorted alphabetically.

TDQS

A4.2/5.0
Behavior4/5

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

Describes the output: one tag per line, sorted alphabetically, in key=value format. States all values must be strings. Without annotations, this provides adequate behavioral context, though edge cases (e.g., empty tags) are not addressed.

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

Conciseness4/5

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

The description is front-loaded with purpose and provides necessary context in a few sentences. Slight redundancy (e.g., 'human-readable' repeated) but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity (1 parameter, no output schema), the description covers the transformation, output format, and compatibility, making it self-sufficient for an agent to invoke correctly.

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

Parameters3/5

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

Schema coverage is 100% so baseline is 3. The main description does not add new parameter details beyond the schema; it focuses on usage. The schema description already covers the parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it converts JSON tags to flat text (key=value per line) and identifies itself as an output converter. It distinguishes from siblings like flat_to_json by specifying it's for final presentation/export.

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

Usage Guidelines4/5

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

Explicitly says to use it 'LAST' in workflows for human-readable or export purposes, and lists compatible OSM tools. However, it does not explicitly mention alternatives like flat_to_json 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.

search_presetsSearch PresetsA

Search for OpenStreetMap presets by name, tags, or geometry type. Presets are predefined feature templates that define how specific types of features should be tagged (e.g., 'Restaurant' preset defines standard tags for restaurants). Supports filtering by preset name keywords, specific tag filters, and geometry type (point/line/area/relation). Returns matching presets with their names, primary tags, geometry types, and match scores. Use this to find the correct preset for a feature type, discover how to tag specific features, or explore available feature templates in OSM.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo(Deprecated: use options.limit instead) Maximum number of preset results to return (optional, no default limit). Use this to get faster responses when you only need a few results, or to avoid overwhelming output when searching broad terms. Example: limit=10 returns only the first 10 matches.
keywordYesOptional keyword to search in preset names (e.g., 'restaurant', 'park', 'school'). Case-insensitive search that matches against preset display names. Leave empty to search by tags or geometry only.
optionsNoOptions to control search behavior and output: 'limit' restricts the maximum number of results returned.
geometryNo(Deprecated: use options.geometry instead) Filter results to only presets that support a specific geometry type (optional). Valid values: 'point' (nodes/POIs), 'vertex' (nodes along ways), 'line' (open ways like roads/rivers), 'area' (closed ways/areas like buildings/parks), 'relation' (complex features). Example: geometry='area' returns only presets that can be applied to area features.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description fully explains the tool's behavior: it returns matching presets with names, primary tags, geometry types, and match scores. No destructive actions are indicated, and the output fields are disclosed.

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

Conciseness4/5

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

The description is three sentences, front-loaded with the main purpose. It explains presets and usage efficiently without excessive wording. Minor redundancy could be tightened, but overall concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description compensates by listing returned fields (names, primary tags, geometry types, match scores). It covers filtering by keyword, tags, and geometry. Adequate for a search tool with nested parameter.

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

Parameters3/5

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

All parameters have schema descriptions (100% coverage), so the baseline is 3. The description adds context like preset examples and use cases, but does not add significant new meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for presets by name, tags, or geometry type, and provides examples like 'Restaurant'. It distinguishes from sibling tools like search_tags and get_preset_details by focusing on finding complete preset templates.

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

Usage Guidelines4/5

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

The description advises using the tool to find correct presets, discover tagging, or explore templates. It does not explicitly state when not to use it or point to alternatives, but the context of siblings implies appropriate use cases.

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

search_tagsSearch TagsA

Search for OpenStreetMap tags by single keyword or pattern. Searches across tag keys, tag values, and localized names to find matching tags. Supports fuzzy matching to find tags even with slight typos or variations. Returns matching tags with their keys, values, and human-readable names. Use this to discover tags related to a topic, find the correct tag when you know part of the name, or explore available tags in a category. For tag pair filtering (e.g., amenity=restaurant), use search_presets instead. Essential for learning OSM tagging vocabulary and discovering lesser-known tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo(Deprecated: use options.limit instead) Maximum total number of results to return across both keyMatches and valueMatches combined (default: 100). Use lower values for faster responses when you only need a few results.
keywordYesSingle standalone keyword or pattern to search for in tag keys, values, and names (e.g., 'restaurant', 'bicycle', 'wheelchair'). The search is case-insensitive and supports partial matching. Will search across tag keys (e.g., 'amenity'), tag values (e.g., 'restaurant'), and localized display names. For tag pair filtering (e.g., amenity=restaurant), use search_presets instead.
optionsNoOptions to control search behavior and output: 'limit' restricts the maximum number of results returned.

TDQS

A4.6/5.0
Behavior4/5

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

Despite no annotations, the description discloses key behaviors: supports fuzzy matching, case-insensitive, partial matching, returns matching tags with keys, values, and names. It does not mention auth needs or rate limits, but overall transparent enough for a search tool.

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

Conciseness4/5

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

The description is a paragraph but front-loaded with core functionality. Every sentence adds value, though it could be slightly more concise. Still very good.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 params, no output schema, the description covers search behavior, fuzzy matching, case-insensitivity, return fields, and references sibling tool. It is complete for a search tool.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds meaning beyond schema: keyword is described as single standalone keyword, case-insensitive, partial matching; limit described as max results with performance tip; options.limit described as default unlimited. This adds value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for OpenStreetMap tags by keyword/pattern across keys, values, and localized names. It distinguishes from sibling search_presets by specifying that tag pair filtering should use search_presets instead.

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

Usage Guidelines5/5

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

The description explicitly tells when to use this tool: to discover tags, find correct tags, explore categories. It also tells when not to use it: for tag pair filtering, use search_presets. This provides clear usage guidance.

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

suggest_improvementsSuggest Tag ImprovementsA

Analyze an OpenStreetMap tag collection and provide intelligent suggestions for improvements. Identifies the feature type from existing tags, finds the matching OSM preset, compares current tags against preset requirements, suggests missing required fields, recommends commonly used optional fields, and provides examples for suggested fields. Returns prioritized improvement suggestions with explanations and example values. Use this to enhance incomplete features, learn best practices for tagging specific feature types, or improve data quality of existing OSM data.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYesCurrent tags for the OSM feature to analyze. Accepts three formats: 1) JSON object ({"amenity": "restaurant", "name": "Example"}), 2) JSON string ('{"amenity":"parking"}'), or 3) flat text format (amenity=restaurant\nname=Example). The tool will analyze these tags to identify the feature type and suggest appropriate additional tags.
optionsNoOptions to control suggestion output: 'summary' adds a human-readable summary, 'limit' restricts the number of suggestions returned.

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It transparently discloses the analysis steps (identify feature type, match preset, compare tags, suggest missing fields) and implies a read-only operation. It does not mention side effects, permissions, or rate limits, but the context (analysis tool) makes destructive behavior unlikely. Slightly more explicit read-only confirmation would elevate the score.

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

Conciseness4/5

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

The description is a single dense paragraph that efficiently conveys the tool's functionality. It is front-loaded with the core action. While concise, it could benefit from bullet points or clearer separation of steps for even quicker scanning, but it is not overly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 must explain return values. It mentions 'prioritized improvement suggestions with explanations and example values', but lacks specifics about the output structure (e.g., whether it returns an array of objects, fields like 'tag', 'reason', 'example'). Given the tool's complexity, more detailed return format expectations would improve completeness.

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

Parameters3/5

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

The input schema provides complete descriptions for both parameters (tags and options) with 100% coverage, so the description adds no additional parameter semantics. The baseline score of 3 is appropriate as the schema already explains parameter meaning and formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs ('analyze', 'provide suggestions', 'identifies', 'compares', 'suggests') and clearly defines the resource ('OpenStreetMap tag collection'). It distinguishes itself from siblings by describing a unique analysis workflow (finding matching OSM presets, comparing against requirements), which is not covered by other tools like validate_tag_collection or compare_tags.

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

Usage Guidelines4/5

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

The description explicitly states use cases: 'enhance incomplete features, learn best practices, or improve data quality'. This provides clear when-to-use guidance. However, it does not mention when NOT to use the tool or alternatives for specific scenarios, which would strengthen the dimension.

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

validate_tagValidate OSM TagA

Validate a single OpenStreetMap tag key-value pair against the OSM tagging schema. Performs comprehensive validation including: deprecation checking (identifies deprecated tags and suggests modern replacements), schema existence validation (verifies the tag key exists in the schema), option validation (checks if the value is in predefined options for that key), and field type checking (distinguishes between strict fields and combo fields that allow custom values). Returns detailed validation results with localized names and actionable messages. Use this for educational purposes, data quality checks, or validating individual tags before bulk operations.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesThe OpenStreetMap tag key to validate (e.g., 'amenity', 'building', 'highway', 'natural'). Tag keys should use the standard OSM format with colons for namespaces (e.g., 'addr:street', 'name:en'). Case-sensitive.
valueYesThe OpenStreetMap tag value to validate against the specified key (e.g., 'restaurant', 'yes', 'residential', 'park'). Values are checked against predefined options if the field has them. Case-sensitive in most cases, though some fields may accept case-insensitive values.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It clearly describes the validation steps and what results include (localized names, actionable messages), implying a read-only, non-destructive operation. It does not explicitly state idempotency, but that is reasonable for a validation tool.

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

Conciseness5/5

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

The description is two paragraphs with clear structure: purpose in first sentence, bullet-like list of validations, and use cases. Every sentence adds value, no redundant text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description sufficiently covers return value content (detailed results, localized names, messages). It addresses input parameters adequately and fits within the context of sibling tools. Could be more specific about output structure, but overall complete.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds valuable context about OSM formatting (colons for namespaces), case sensitivity for keys and values, and value checking against options. This enhances understanding beyond the schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it validates a single OSM tag key-value pair against the schema, listing specific validations (deprecation, schema existence, option validation, field type checking). It distinguishes from siblings like validate_tag_collection and compare_tags by focusing on individual tags.

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

Usage Guidelines4/5

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

The description recommends use for educational purposes, data quality checks, or before bulk operations, indicating when to use it. It implicitly contrasts with validate_tag_collection for multiple tags, but doesn't explicitly exclude other scenarios or name alternatives.

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

validate_tag_collectionValidate Tag CollectionA

Validate a complete collection of OpenStreetMap tags (e.g., all tags for a feature) against the OSM tagging schema. Performs batch validation of multiple tag pairs, checks for deprecated tags across the entire collection, identifies conflicting or incompatible tags, and validates tag combinations. Returns comprehensive validation results for all tags with individual validation status, deprecation warnings, and collection-level issues. Use this to validate complete features before uploading to OSM or for data quality analysis of existing features.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYesA collection of OpenStreetMap tags to validate. Accepts three formats: 1) JSON object ({"amenity": "restaurant", "name": "Example"}), 2) JSON string ('{"amenity":"parking"}'), or 3) flat text format (amenity=restaurant\nname=Example). All tags in the collection will be validated individually and as a set to identify conflicts or missing required tags.
optionsNoOptions to control validation output detail and summary generation.

TDQS

A3.7/5.0
Behavior2/5

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

No annotations provided, and description does not disclose whether the tool is read-only or has side effects. For a validation tool it likely is safe, but lack of explicit behavioral context reduces transparency.

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

Conciseness4/5

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

Three sentences, front-loaded with core purpose. Concise but could be slightly tighter without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, description adequately hints at return value (validation results, deprecation warnings, collection-level issues) and covers the tool's complexity for its intended use.

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

Parameters4/5

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

Schema coverage is 100%, but description adds value by explaining the three input formats for tags and the effect of options (summary, verbose), providing context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it validates a complete collection of OSM tags, performs batch validation, checks deprecated tags and conflicts, distinguishing it from single-tag validation (validate_tag) or comparison (compare_tags).

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

Usage Guidelines3/5

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

Describes when to use (before uploading to OSM, data quality analysis) but does not explicitly state when not to use or mention alternative sibling tools like validate_tag for single tags.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev3.8.1
    • Addedvalidate_tag
  2. 1 tool updatev3.0.0
    • Removedvalidate_tag

TDQS

A4.3/5.0

Scored across 10 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: compare, convert formats, get details, get values, search, suggest, and validate. Even overlapping areas like search vs. get are well-differentiated by scope and use case.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., compare_tags, get_preset_details, validate_tag_collection), making them predictable and easy to understand.

Tool Count5/5

With 10 tools, the set is well-scoped for the server's purposeโ€”comprehensive without being overwhelming. Each tool serves a necessary function in the OSM tagging workflow.

Completeness5/5

The tool set covers the full lifecycle of working with OSM tagging schema: searching, retrieving details, validating, suggesting improvements, comparing, and format conversion. No obvious gaps for the intended domain.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to interact with Obsidian vaults, providing tools for reading, creating, editing and managing notes and tags.
    1,931
    733
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Enables AI assistants to search, validate, and edit OpenStreetMap data through natural language commands and built-in safety protections. It supports discovery of nearby amenities, geographic data exploration, and secure map editing via OAuth authentication.
    28
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Integrates SkyFi satellite imagery and OpenStreetMap services with AI applications to enable high-resolution image searching, ordering, and area monitoring. It provides 21 tools for geospatial tasks, including geocoding, tasking quotes, and satellite pass prediction.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides statistics on OpenStreetMap tags (keys and key=value pairs) via MCP tools, enabling querying of tag usage and metadata.
    5
    MIT