DEV Community

Rich Schramm
Rich Schramm

Posted on

Building a Multi-Language Geocoder for Claude AI Using MCP

TL;DR — I built a “Rosetta Stone” for Model Context Protocol (MCP) geocoding tools, showing how to create the same tool in Python (x2) and TypeScript, all with Claude Desktop integration.

🧭 Why I Built This

I’m exploring how to build real, useful AI-connected tools using Claude Desktop and MCP, and I wanted to compare:
• 🐍 Python with urllib (manual API calls)
• 🐍 Python with googlemaps SDK
• ⚡ Node.js/TypeScript with @googlemaps/google-maps-services-js

All three versions expose the same geocode tool, which takes an address and returns its latitude and longitude from the Google Maps Geocoding API.

🧪 Live Repo

📦 GitHub: richardschrammcom/mcp-geocoder-rosetta

🛠️ What’s Inside

Each implementation includes:
• A minimal mcp.tool()-compatible server
• .env-based config for easy API key swapping
• Instructions to run via uv, tsx, or directly
• Claude Desktop config block (so you can plug & play)

🧠 Why MCP?

If you haven’t looked into Model Context Protocol, it’s the spec that powers Claude’s ability to call external tools. It’s like a programmable memory extension — and it’s a big deal for app developers building agent-based or plug-in-style tools.

🔍 Use Cases

This repo is great for:
• Learning MCP without getting lost in abstract docs
• Testing Claude tool integrations locally
• Comparing SDK usage across languages
• Starting your own Claude-compatible tool servers

⚙️ What’s Next

I’m experimenting with MCP agents, workflow chaining, and more complex tool/resource pairings.

Follow me here if you’re also exploring this space — or fork the repo and try building your own tool!

Happy geocoding,
Richard Schramm
GitHub · LinkedIn

Heroku

Deliver your unique apps, your own way.

Heroku tackles the toil — patching and upgrading, 24/7 ops and security, build systems, failovers, and more. Stay focused on building great data-driven applications.

Learn More

Top comments (0)

Sentry image

Make it make sense

Only the context you need to fix your broken code with Sentry.

Start debugging →