Skip to main content
Glama
devsanthoshmk

Google Maps MCP Server

🗺️ Google Maps MCP Server (gmaps-mcp)

MCP Version Python License: MIT

자체 포함된 경량 Google Maps Model Context Protocol (MCP) 서버로, 공식 MCP Python SDK로 구축되었습니다. AI 에이전트(예: Claude Desktop, Cursor, Cline, Antigravity)에 구조화된 검색 결과, 장소 세부 정보, 평점, 연락처 정보, 좌표 및 Google Maps URL을 제공합니다.


⚡ 주요 기능

  • 원클릭 설치: 수동 환경 설정 없이 uvx를 통해 어디서나 즉시 실행됩니다.

  • 100% 자체 포함: 스크래퍼 엔진이 asyncio 및 aiohttp를 통해 기본적으로 in-process로 통합되어 외부 하위 프로세스, 헤드리스 브라우저 또는 API 키가 필요하지 않습니다.

  • 풍부한 구조화된 장소 데이터: 장소 ID, 업체명, 카테고리, 주소, 지역 및 국제 전화번호, 웹사이트 URL, 좌표(lat/long), 별점, 리뷰 수, Google Maps 직접 링크를 반환합니다.

  • Stdio 및 Streamable HTTP: 데스크톱 AI 클라이언트를 위한 네이티브 stdio 지원, 원격/컨테이너화된 배포를 위한 streamable-http 지원.

  • 깔끔한 JSON-RPC: 모든 내부 로깅은 엄격히 stderr로 파이프되어 stdio 프로토콜 스트림을 100% 준수하게 유지합니다.


Related MCP server: Google Maps MCP Server

🚀 빠른 시작

uvx를 사용하여 직접 실행:

# Run directly from GitHub repository
uvx --from git+https://github.com/<your-username>/gmaps-mcp.git gmaps-mcp

또는 로컬 클론에서:

uv run gmaps-mcp

🛠️ MCP 클라이언트 설정

1. Claude Desktop

claude_desktop_config.json에 다음을 추가하십시오 (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json, Windows: %APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "google-maps": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/<your-username>/gmaps-mcp.git",
        "gmaps-mcp"
      ]
    }
  }
}

로컬 폴더에서 실행하는 경우:

{
  "mcpServers": {
    "google-maps": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/gmap-mcp",
        "gmaps-mcp"
      ]
    }
  }
}

2. Cursor IDE

Cursor에서 설정 → 기능 → MCP를 열거나 (또는 프로젝트의 .cursor/mcp.json을 편집):

{
  "mcpServers": {
    "google-maps": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/<your-username>/gmaps-mcp.git",
        "gmaps-mcp"
      ]
    }
  }
}

3. Cline (VS Code Extension)

Cline 설정(cline_mcp_settings.json)에서:

{
  "mcpServers": {
    "google-maps": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/<your-username>/gmaps-mcp.git",
        "gmaps-mcp"
      ]
    }
  }
}

🧰 사용 가능한 도구

1. search_google_maps

Google Maps에서 업체, 명소, 서비스, 랜드마크를 검색합니다.

매개변수

유형

기본값

설명

query

string

(필수)

검색어 (예: "coffee in Koramangala Bangalore", "dentists near Connaught Place Delhi", "Italian restaurants in New York").

limit

integer

10

반환할 최대 결과 수 (1 ~ 50).

country

string

"in"

지역 로컬라이제이션을 위한 두 글자 ISO 국가 코드 (예: "in", "us", "gb", "de", "fr", "ae").

language

string

"en"

결과 언어 코드 (예: "en", "hi", "es", "fr").

출력 구조

{
  "query": "coffee in Koramangala Bangalore",
  "country": "in",
  "language": "en",
  "total_results": 2,
  "places": [
    {
      "place_id": "ChIJ80IECk8UrjsRqCffDjE09lw",
      "name": "Dyu Art Cafe",
      "category": "Art cafe",
      "address": "KHB MIG Colony, 1st Cross Rd, Koramangala 8th Block, Bengaluru, Karnataka 560095",
      "phone": "096113 19774",
      "international_phone": "+91 96113 19774",
      "website": "http://www.dyuartcafe.com/",
      "domain": "dyuartcafe.com",
      "latitude": 12.9373076,
      "longitude": 77.6176544,
      "rating": 4.4,
      "review_count": 21440,
      "google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJ80IECk8UrjsRqCffDjE09lw"
    }
  ]
}

2. get_place_details

특정 장소 또는 업체의 상세 정보를 Place ID 또는 이름으로 검색합니다.

매개변수

유형

기본값

설명

place

string

(필수)

Google Place ID (예: "ChIJ12k5kG_iDDkRwuzibQwYZ4M") 또는 정확한 업체/랜드마크 이름 (예: "AIIMS New Delhi").

country

string

"in"

두 글자 ISO 국가 코드 (기본값: "in").

language

string

"en"

응답 언어 코드 (기본값: "en").


🌐 원격 배포 (Streamable HTTP)

서버는 리버스 프록시 또는 클라우드 호스팅 뒤에 배포하기 위한 최신 Streamable HTTP 전송을 지원합니다:

# Start Streamable HTTP server on port 8000
uv run gmaps-mcp --transport streamable-http --host 0.0.0.0 --port 8000

MCP 엔드포인트는 다음에서 사용 가능합니다: http://<host>:8000/mcp


🧪 개발 및 테스트

uv를 사용하여 단위 및 통합 테스트 실행:

# Run pytest test suite
uv run --with pytest --with pytest-asyncio pytest tests/ -v

# Run the server locally with debug logs
uv run gmaps-mcp --log-level DEBUG

📦 프로젝트 구조

gmap-mcp/
├── pyproject.toml              # Packaging & dependencies (PEP 517/621)
├── README.md                   # Setup guide and MCP client docs
├── src/
│   └── gmaps_mcp/
│       ├── __init__.py         # Package entry
│       ├── schemas.py          # Pydantic data models (Place, Search, Details)
│       ├── server.py           # MCPServer instance & CLI runner
│       ├── tools.py            # MCP Tool definitions & detailed descriptions
│       └── scraper/
│           ├── __init__.py     # Scraper API
│           └── crawler.py      # Async Google Maps parser & extraction engine
└── tests/
    ├── test_schemas.py         # Schema tests
    ├── test_crawler.py         # Parser unit tests
    └── test_server.py          # MCP Server registration & tool calling tests

📜 귀속 및 라이선스

  • 스크래퍼 코어는 christivn/mapScraper (커밋 1b38cf3e153294e3dad2f6cb5862be0201a54065)에서 수정 및 모듈화되었습니다.

  • MIT 라이선스에 따라 라이선스가 부여됩니다.

Available Tools

2 tools
get_place_detailsA

Retrieve detailed information for a single specific Google Maps place or business. Looks up a place using its unique Google Place ID (e.g., 'ChIJ...' or 'place_id:ChIJ...') or specific landmark/business name. Returns complete structured details including address, phone number, website, rating, coordinates, and Google Maps URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
placeYesThe place identifier to fetch details for. Can be either: 1. A Google Place ID (e.g., 'ChIJ12k5kG_iDDkRwuzibQwYZ4M' or 'place_id:ChIJ...') 2. An exact place / business name and location (e.g., 'AIIMS New Delhi' or 'Taj Mahal Palace Mumbai').
countryNoTwo-letter ISO country code for region localization (default: 'in').in
languageNoLanguage code for the response (default: 'en').en

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundNoWhether the place was successfully found
placeNoThe retrieved place object if found, otherwise null
query_or_idYesThe place query or Place ID searched for

TDQS

A4.2/5.0
Behavior3/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 discloses the lookup behavior (by ID or name) and the return fields (address, phone, etc.), but does not mention rate limits, authentication requirements, or what happens if the place is not found. Adequate but not comprehensive.

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 sentences, front-loaded with the main purpose, and each sentence adds essential information. No wasted words.

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 the tool's moderate complexity, the description covers the key purpose, parameter usage, and return value hints. The presence of an output schema reduces the need to describe return values. Minor gaps exist (e.g., error behavior), but overall it is sufficiently 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%, so the baseline is 3. The description adds value by explaining the two formats for the 'place' parameter (Google Place ID vs. name/location), which goes beyond the schema's description. This additional context justifies a 4.

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 specifies the verb 'retrieve' and the resource 'detailed information for a single specific Google Maps place or business'. It distinguishes from sibling tool 'search_google_maps' by emphasizing single-place lookup vs. searching.

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 explains when to use this tool (to get details for a known place via ID or name) and implicitly distinguishes from searching. It does not explicitly state when not to use it or mention alternatives beyond the sibling context.

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

search_google_mapsA

Search Google Maps for local businesses, places, points of interest, and services. Returns structured place data including business name, Google Place ID, category, formatted street address, phone numbers, website URL, geo-coordinates (latitude/longitude), star rating, total review count, and direct Google Maps URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of place results to return (between 1 and 50, default is 10).
queryYesThe search query for Google Maps. Can be a business category, specific place name, service, or landmark along with a location. Examples: 'coffee shops in Koramangala Bangalore', 'dentists near Connaught Place Delhi', 'Italian restaurants in Bandra Mumbai', 'hospitals in Hyderabad', 'electricians near Indiranagar', 'museums in London'.
countryNoTwo-letter ISO 3166-1 alpha-2 country code to localize search results and map boundaries. Default is 'in' (India). Other examples: 'us' (United States), 'gb' (United Kingdom), 'ca' (Canada), 'au' (Australia), 'de' (Germany), 'fr' (France), 'sg' (Singapore), 'ae' (UAE).in
languageNoLanguage code for the results (e.g. 'en' for English, 'hi' for Hindi, 'es' for Spanish, 'fr' for French, 'de' for German, 'ja' for Japanese). Default is 'en'.en

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYesThe search query that was executed
placesNoList of matched Google Maps places
countryYesThe ISO 3166-1 alpha-2 country code used (e.g., 'in', 'us')
languageYesThe language code used for results (e.g., 'en', 'hi')
total_resultsYesNumber of places returned in this response

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It states it returns structured place data listing 10 fields, which is helpful. However, it does not disclose potential rate limits, API quota implications, or any constraints on search frequency or result freshness. The behavioral disclosure is adequate but not comprehensive.

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, concise sentence that front-loads the main action. It then lists the return fields, which is useful but slightly verbose for a search tool. It earns its place without unnecessary fluff.

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 the tool's low complexity (4 params, 1 required, no nested objects) and presence of an output schema, the description is fairly complete. It explains the search scope and return fields. It could be improved by noting that results are limited by Google's ranking (not just the limit parameter) and how to formulate effective queries beyond the examples.

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 description coverage is 100%, so baseline is 3. The description adds no parameter-level detail beyond what the schema already provides. It lists the return fields but not how parameters affect them. Since the schema is already thorough, no penalty is applied.

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 ('Search') and resources ('Google Maps for local businesses, places, points of interest, and services'), clearly distinguishing it from its sibling tool 'get_place_details' which would provide details on a specific place.

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 implies this tool is for broad searches (businesses, places, POIs), and the sibling tool name 'get_place_details' suggests the alternative for specific place info. However, no explicit when-to-use or when-not-to-use guidance is provided.

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. 2 tool updatesv0.1.0
    • First observedget_place_details
    • First observedsearch_google_maps

TDQS

A3.7/5.0

Scored across 2 tools

Disambiguation4/5

The two tools have distinct purposes: search_google_maps finds places by query, and get_place_details retrieves details for a known place ID. There is slight overlap in the returned fields, but the use cases are clearly different.

Naming Consistency4/5

Both tools use a clear verb_noun pattern (search/get + google_maps/place_details). The naming is consistent, though 'get_place_details' could be more symmetrical as 'get_google_maps_place' for perfect parity.

Tool Count2/5

Only two tools for a Google Maps server is very limited. Maps APIs typically support additional operations like directions, geocoding, or place photos, so the tool count feels too small for the implied scope.

Completeness2/5

The core search and detail retrieval are present, but critical operations like navigation (directions), geocoding (address to coordinates and reverse), and place photo fetching are missing, creating significant gaps for common map-related tasks.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers