Date: 2025-11-16 Auditor: Claude (AI Assistant) Project: osmmcp - OpenStreetMap MCP Server
This audit reviews all project documentation for accuracy, completeness, and alignment with the current codebase. Overall, the documentation is well-maintained with a few critical inaccuracies and outdated information that need attention.
Overall Assessment: 🟡 Good with Issues Critical Issues: 3 Minor Issues: 5 Outdated Documents: 1
- README.md - Main project documentation
- CLAUDE.md - Developer/AI assistant guidance
- TRACING.md - OpenTelemetry tracing documentation
- CONTRIBUTORS.md - Contributor list
- pkg/osm/README.md - OSM package documentation
- pkg/tools/docs/geocoding.md - Geocoding tools guide
- pkg/tools/docs/ai_prompts.md - AI integration prompts
- docs/tool_prompt_pattern.md - Pattern documentation
- docs/refactoring.md - Refactoring notes
- MCP_TRANSPORT_STANDARDIZATION_ANALYSIS.md - Transport analysis
⚠️ OUTDATED
Locations: README.md, CLAUDE.md, pkg/tools documentation
Problem:
- CLAUDE.md line 13 claims: "30+ OSM-specific tools"
- README.md line 329 claims: "14 tools" in project structure
- Actual count: 25 tools registered in
pkg/tools/registry.go
Registered Tools (25):
- get_version
- geocode_address
- reverse_geocode
- get_map_image
- route_fetch
- get_route_directions
- suggest_meeting_point
- route_sample
- analyze_commute
- find_nearby_places
- explore_area
- find_parking_facilities
- find_charging_stations
- find_schools_nearby
- analyze_neighborhood
- geo_distance
- bbox_from_points
- centroid_points
- polyline_decode
- polyline_encode
- enrich_emissions
- osm_query_bbox
- filter_tags
- sort_by_distance
- tile_cache
Unregistered Tools (Exist in Code but NOT Registered):
find_route_charging_stations(mentioned in README.md table line 56)get_route(mentioned in README.md table line 51)search_category(mentioned in README.md table line 50)
These tools exist in the codebase (pkg/tools/) but are NOT added to the registry, so they're not actually available to users!
Recommendation:
- EITHER: Register the 3 missing tools in
registry.go→ brings total to 28 tools - OR: Remove them from README.md table and mark as deprecated
- Update CLAUDE.md to say "25 tools" (or 28 if registered)
- Update README.md project structure section to say "25 tools" (or 28)
Location: README.md lines 326-335
Current Documentation:
- `pkg/server` - MCP server implementation
- `pkg/tools` - OpenStreetMap tool implementations and tool registry (14 tools)
- `pkg/osm` - OpenStreetMap API clients, rate limiting, polyline encoding, and utilities
- `pkg/geo` - Geographic types, bounding boxes, and Haversine distance calculations
- `pkg/cache` - TTL-based caching layer for API responses (5-minute default)
- `pkg/testutil` - Testing utilities and helpers
- `pkg/version` - Build metadata and version informationMissing Packages:
pkg/core- CRITICAL OMISSION - Core utilities including HTTP retry logic, validation, error handling, Overpass query builder, OSRM service client (mentioned extensively in CLAUDE.md)pkg/monitoring- CRITICAL OMISSION - Prometheus metrics, health checking, connection monitoring (mentioned in CLAUDE.md and TRACING.md)pkg/tracing- OpenTelemetry tracing support (mentioned in TRACING.md)
Recommendation: Add the three missing packages to README.md project structure section with descriptions from CLAUDE.md.
Location: MCP_TRANSPORT_STANDARDIZATION_ANALYSIS.md
Problem: This document (dated 2025-11-12) states that dual transport support is "BROKEN" (line 22):
Dual Transport (stdio + HTTP): ❌ BROKEN - Currently mutually exclusive
However, the current code in cmd/osmmcp/main.go (lines 242-286) shows this has been FIXED:
- HTTP transport runs in a goroutine (non-blocking) when
--enable-httpis set - stdio transport ALWAYS runs on the main thread
- Both operate simultaneously
Status in Document: "80% compliant" Actual Status: Likely 95%+ compliant (dual transport is now working)
Recommendation:
- Archive this document to
docs/archive/or add a clear "RESOLVED" banner at the top - Update to reflect that the critical dual transport issue has been fixed
- Re-test the remaining minor health check format issues (if still relevant)
Locations: README.md line 220, go.mod line 3
Both correctly state: Go 1.24 or higher
Location: README.md lines 249-252, pkg/osm/ratelimit.go
Documentation states:
- Nominatim: 1 rps, burst 1
- Overpass: 2 per minute (0.033 rps), burst 2
- OSRM: 100 per minute (1.67 rps), burst 5
Code confirms:
// Nominatim: 1 request per second
limiters[ServiceNominatim] = rate.NewLimiter(rate.Every(1*time.Second), 1)
// Overpass: 2 requests per minute
limiters[ServiceOverpass] = rate.NewLimiter(rate.Every(30*time.Second), 2)
// OSRM: 100 requests per minute
limiters[ServiceOSRM] = rate.NewLimiter(rate.Every(600*time.Millisecond), 5)Status: ✅ Accurate
Location: README.md line 313-320
Documentation states:
- Nominatim - For geocoding operations
- Overpass API - For OpenStreetMap data queries
- OSRM - For routing calculations
Code confirms (pkg/osm/util.go):
NominatimBaseURL = "https://nominatim.openstreetmap.org"
OverpassBaseURL = "https://overpass-api.de/api/interpreter"
OSRMBaseURL = "https://router.project-osrm.org"Status: ✅ Accurate
Location: CLAUDE.md lines 36-67, cmd/osmmcp/main.go
All documented flags exist and match the code:
--debug✅--version✅--generate-config✅--user-agent✅--enable-http✅--http-addr✅ (default: ":7082")--http-base-url✅--http-auth-type✅ (none/bearer/basic)--http-auth-token✅--enable-monitoring✅ (default: true)--monitoring-addr✅ (default: ":9090")--nominatim-rps,--nominatim-burst✅--overpass-rps,--overpass-burst✅--osrm-rps,--osrm-burst✅
Undocumented flag:
--merge-only(line 60 in main.go) - Not mentioned in CLAUDE.md
Recommendation: Add --merge-only to CLAUDE.md flag documentation.
Location: CLAUDE.md lines 314-328, pkg/monitoring/metrics.go
All documented metrics exist in the code:
osmmcp_mcp_requests_total✅osmmcp_mcp_request_duration_seconds✅osmmcp_external_service_requests_total✅osmmcp_external_service_request_duration_seconds✅osmmcp_rate_limit_exceeded_total✅osmmcp_rate_limit_wait_duration_seconds✅osmmcp_cache_hits_total/osmmcp_cache_misses_total✅osmmcp_cache_size✅osmmcp_active_connections✅osmmcp_errors_total✅osmmcp_goroutines✅osmmcp_memory_usage_bytes✅osmmcp_system_info✅
Status: ✅ Comprehensive and accurate
Location: CLAUDE.md lines 22-34, README.md lines 183-202
Documented Architecture:
- MCP Server Layer (
pkg/server/) ✅ - Tools Layer (
pkg/tools/) ✅ - Core Utilities (
pkg/core/) ✅ (missing from README.md) - OSM Integration (
pkg/osm/) ✅ - Caching Layer (
pkg/cache/) ✅ - Monitoring Layer (
pkg/monitoring/) ✅ (missing from README.md)
Design Patterns (all verified in code):
- Registry Pattern ✅ (
pkg/tools/registry.go) - Composable Tools ✅ (multiple examples)
- Fluent Builders ✅ (
pkg/core/overpass.go) - Service Pattern ✅ (
pkg/core/osrm.go, etc.)
Status: ✅ Accurate (with README.md omissions noted in Issue #2)
Score: 85/100
Strengths:
- Comprehensive tool table with examples
- Clear installation instructions
- Good API usage documentation
- Accurate rate limit information
Issues:
- ❌ Tool count mismatch (claims 14, should be 25)
- ❌ Lists 3 tools that aren't registered
- ❌ Missing 3 packages in project structure
⚠️ Could benefit from architecture diagram
Recommendations:
- Fix tool count in project structure section
- Verify all tools in table are actually registered
- Add missing packages:
pkg/core,pkg/monitoring,pkg/tracing - Consider adding visual architecture diagram
Score: 95/100
Strengths:
- Comprehensive technical reference
- Accurate command-line flag documentation
- Detailed monitoring and metrics information
- Good code examples
- Accurate architecture description
Issues:
⚠️ Claims "30+ OSM-specific tools" (should be 25)⚠️ Missing--merge-onlyflag documentation
Recommendations:
- Update tool count to "25 tools"
- Add
--merge-onlyflag to flag documentation
Score: 98/100
Strengths:
- Clear, well-structured
- Excellent examples (Jaeger, Tempo)
- Good troubleshooting section
- Accurate technical details
Issues:
- None identified
Status: ✅ Production-ready
Score: 30/100 (as current documentation)
Issues:
- ❌ States dual transport is broken (it's been fixed)
- ❌ Dated 2025-11-12 but code has since been updated
- ❌ Compliance score of 80% likely no longer accurate
Recommendation: ARCHIVE THIS DOCUMENT or add clear resolution status banner:
# ⚠️ STATUS: RESOLVED
**Date Fixed:** 2025-11-14
**Current Status:** Dual transport support has been implemented in main.go (lines 242-286)
---
# [Original Analysis Below]
# OSM MCP Transport Standardization Analysis
...Score: 88/100
Strengths:
- Clear package overview
- Good function documentation
- Accurate design principles
Issues:
⚠️ References "14 tools" (should be 25)⚠️ Could expand on rate limiting details
Score: N/A (planning document)
Status: Good historical record of refactoring decisions. Useful for understanding the evolution of the codebase.
Score: 95/100
Status: Clear, concise, good examples. Useful for understanding the MCP prompt pattern.
-
Fix Tool Count Consistency
- Update CLAUDE.md: Change "30+ tools" to "25 tools"
- Update README.md project structure: Change "14 tools" to "25 tools"
- DECISION NEEDED: Register the 3 unregistered tools OR remove from README table
-
Update Package Structure in README.md
- Add
pkg/corepackage description - Add
pkg/monitoringpackage description - Add
pkg/tracingpackage description
- Add
-
Archive/Update Transport Analysis
- Add "RESOLVED" banner to MCP_TRANSPORT_STANDARDIZATION_ANALYSIS.md
- OR move to
docs/archive/directory - Update status to reflect fixed dual transport
-
Complete Flag Documentation
- Add
--merge-onlyflag to CLAUDE.md
- Add
-
Verify Unregistered Tools
- Test
find_route_charging_stationsfunctionality - Test
get_routefunctionality - Test
search_categoryfunctionality - EITHER: Add to registry.go OR mark as deprecated/remove
- Test
-
Add Visual Documentation
- Create architecture diagram for README.md
- Add data flow diagrams for complex operations
-
Enhance Tool Documentation
- Add more usage examples for each tool
- Create troubleshooting guide for common issues
-
Version Documentation
- Add changelog/release notes documentation
- Document version history and breaking changes
| Metric | Score | Status |
|---|---|---|
| Overall Accuracy | 85% | 🟡 Good |
| Completeness | 80% | 🟡 Good |
| Up-to-date | 75% | 🟡 Fair |
| Code Examples | 90% | 🟢 Excellent |
| API Documentation | 95% | 🟢 Excellent |
| User Guides | 85% | 🟡 Good |
The osmmcp project has strong, comprehensive documentation that serves both human developers and AI assistants well. The main issues are:
- Tool count inconsistencies across multiple files
- Unregistered tools that appear in documentation but not in code
- One outdated status document that needs archival
These are all easily fixable and don't reflect fundamental issues with the project's documentation philosophy or maintenance.
The TRACING.md and CLAUDE.md files are particularly well-done and serve as good examples of technical documentation.
Overall Grade: B+ (87/100)
With the recommended fixes applied, this would be A-grade documentation (95/100).
- README.md - Tool count and package structure
- CLAUDE.md - Tool count claim
- MCP_TRANSPORT_STANDARDIZATION_ANALYSIS.md - Archive or update
- pkg/osm/README.md - Tool count reference
- pkg/tools/registry.go - Register missing tools OR deprecate them
- Add architecture diagrams
- Expand troubleshooting documentation
- Add changelog documentation
Audit completed: 2025-11-16 Next review recommended: After fixing Priority 1 issues