Skip to main content
Glama
PinMeTo Location MCP

PinMeTo Location MCP

Official
by PinMeTo

PinMeTo Location MCP

version download Install in VS Code Install in Cursor

An MCP server that connects your PinMeTo locations to AI assistants. Ask questions about your business in natural language and get instant insights from Google, Facebook, and Apple.

Works with MCP-compatible clients that can run local STDIO servers, including Claude Desktop, the ChatGPT desktop app, VS Code, Cursor, and more.


What Can You Do With It?

Ask your AI assistant questions like:

  • "What's my average Google rating across all locations?"

  • "Show me negative reviews that need responses"

  • "Compare this quarter's performance to last year"

  • "Which locations are performing best?"

See Example Prompts for more ideas.

πŸ“Š Turn your data into reports. On top of the .mcpb data connection, install the PinMeTo Locations plugin to add formatted PDF and PowerPoint reports across all your locations. See Creating Reports below.


Related MCP server: mcp-ohmy-sql

Installation

Claude Desktop

  1. Download the installer: click the .mcpb badge above, or grab pinmeto-location-mcp.mcpb from the latest release

  2. Double-click the downloaded file (with Claude Desktop open), or drag it into Claude Desktop β†’ Settings β†’ Extensions

  3. Enter your PinMeTo API credentials (Account ID, App ID, App Secret) in the install dialog

  4. Done! This installs the data connection β€” the MCP server and its twelve tools. Start asking questions about your locations.

Get your credentials from PinMeTo Account Settings.

Reports (optional). To also generate PDF and PowerPoint reports:

  1. Open Customize in the sidebar, go to Plugins

  2. Click + in Personal plugins, choose Add marketplace

  3. Enter PinMeTo/claude-plugins

  4. Install PinMeTo Locations β€” this adds the report skill

Note: While the plugin repository is private, installing requires the Claude GitHub App to have access to it.

ChatGPT Desktop App

The ChatGPT desktop app can run PinMeTo locally as a STDIO MCP server. You need Node.js v22 or later, Git, and PinMeTo API credentials before you start.

  1. Get your Account ID, App ID, and App Secret from PinMeTo Account Settings.

  2. In the ChatGPT desktop app, open Settings β†’ Plugins, then select the MCPs tab.

  3. Select Add β†’ Add MCP server.

  4. Enter the following values:

    Field

    Value

    Name

    PinMeTo

    Type

    STDIO

    Command to launch

    npx

    Argument 1

    -y

    Argument 2

    github:PinMeTo/pinmeto-location-mcp

    Environment variable

    PINMETO_ACCOUNT_ID = your Account ID

    Environment variable

    PINMETO_APP_ID = your App ID

    Environment variable

    PINMETO_APP_SECRET = your App Secret

    Add each argument and environment variable in its own row. Leave Environment variable passthrough and Working directory empty.

  5. Select Save, then restart when prompted.

  6. Start a new Codex task in the desktop app. Enter /mcp to confirm that PinMeTo is connected, then try: β€œList my PinMeTo locations.”

If the server cannot find npx, locate it with command -v npx on macOS/Linux, (Get-Command npx).Source in Windows PowerShell, or where npx in Windows Command Prompt. Use the returned absolute path as Command to launch.

ChatGPT web: This local STDIO setup is available to Codex in the ChatGPT desktop app. ChatGPT on the web does not read local MCP configuration; web Chat and Work use remote MCP tools supplied by plugins instead. See OpenAI's MCP documentation.

Other Installation Options

Platform

Method

VS Code

Click the VS Code badge above

Cursor

Click the Cursor badge above

Claude Code (CLI)

The plugin doesn't bundle a server. Run the server directly from GitHub: npx -y github:PinMeTo/pinmeto-location-mcp with the three PINMETO_* env vars, or use claude mcp add

Manual

See Manual Installation


Available Features

Feature

What You Can Do

Locations

View all your locations, search by name or city

Google Insights

Views, searches, direction requests, calls, clicks

Google Reviews

Read reviews, filter by rating, find unresponded reviews

Google Ratings

Average rating, review count, star distribution

Google Keywords

See how customers search for your business

Facebook Insights

Page engagement and reach metrics

Facebook Ratings

Ratings and recommendations

Apple Insights

Apple Maps performance metrics

All insights support time aggregation (daily, monthly, quarterly) and period comparison (month-over-month, year-over-year).


Creating Reports

Generate professional reports from your location data using the PinMeTo Location Reports Skill.

What It Does

Transforms your multi-location analytics into formatted PDF and PowerPoint reports:

  • Monthly, Quarterly, Half-Yearly, and Yearly reports

  • Includes Google, Facebook, and Apple metrics

  • Review ratings and sentiment analysis

  • Search keyword performance

  • Data-driven strategic recommendations

The report skill comes from the PinMeTo Locations plugin; the location data and tools come from the .mcpb. With both installed, ask for "a quarterly report" or "a Q4 board presentation" and the skill activates automatically.

Prefer not to install the plugin? The skill is also available standalone from the skill repository.


Documentation

Guide

Description

Getting Started

First steps, FAQ, and troubleshooting

Example Prompts

Prompts organized by business need

Tools Reference

Complete tool documentation

Advanced Features

Time aggregation and comparisons

Manual Installation

Developer setup instructions


Requirements

  • An MCP-compatible client (Claude Desktop, VS Code, Cursor, or others)

  • For local installation in the ChatGPT desktop app: Node.js v22 or later

  • PinMeTo account with API access


Support


Privacy Policy

This server sends your PinMeTo API credentials to PinMeTo's API to fetch your own location data, and returns that data to your MCP client. It stores nothing remotely and transmits nothing to any third party.

  • Collected: your PinMeTo Account ID, App ID, and App Secret, supplied by you at install time.

  • Used for: authenticating requests to the PinMeTo API on your behalf.

  • Stored: credentials remain under your MCP client's control (for example, the macOS Keychain under Claude Desktop); this server never writes them to disk. Location and insights data is cached in memory for the duration of a session and never written to disk.

  • Shared: nothing is shared with third parties.

  • Retained: the server itself retains nothing after the process exits, and its in-memory location and insights cache is discarded then. Credential persistence is managed by your MCP client, not by this server.

  • Contact: PinMeTo Support

Full policy: https://places.pinmeto.com/listings/public/legal/privacypolicy


License

MIT

Available Tools

12 tools
pinmeto_get_apple_insightsApple Maps insightsA
Read-only

Fetch Apple metrics for all locations, or a single location if storeId provided. Supports time aggregation (default: total) and period comparisons.

Comparison Options:

  • compare_with="prior_period": Compare with same-duration period before (MoM, QoQ)

  • compare_with="prior_year": Compare with same dates last year (YoY)

  • When comparison is active, each metric includes a comparison field with prior, delta, deltaPercent

Error Handling:

  • Rate limit (429): errorCode="RATE_LIMITED", message includes retry timing

  • Not found (404): errorCode="NOT_FOUND" if storeId doesn't exist

  • All errors: check structuredContent.errorCode and .retryable for programmatic handling

Inputs: to (required), from (required), storeId, aggregation, +2 more. Returns: error, warning, insights, errorCode, +7 more

pinmeto_get_facebook_brandpage_insightsFacebook brand page insightsA
Read-only

Fetch Facebook metrics for all brand pages. Supports time aggregation (default: total) and period comparisons.

Comparison Options:

  • compare_with="prior_period": Compare with same-duration period before (MoM, QoQ)

  • compare_with="prior_year": Compare with same dates last year (YoY)

  • When comparison is active, each metric includes flat comparison fields (priorValue, delta, deltaPercent)

Error Handling:

  • Rate limit (429): errorCode="RATE_LIMITED", message includes retry timing

  • Auth failure (401): errorCode="AUTH_INVALID_CREDENTIALS"

  • All errors: check structuredContent.errorCode and .retryable for programmatic handling

Inputs: to (required), from (required), aggregation, compare_with, +1 more. Returns: error, warning, insights, errorCode, +7 more

pinmeto_get_facebook_insightsFacebook insightsA
Read-only

Fetch Facebook metrics for all locations, or a single location if storeId provided. Supports time aggregation (default: total) and period comparisons.

Comparison Options:

  • compare_with="prior_period": Compare with same-duration period before (MoM, QoQ)

  • compare_with="prior_year": Compare with same dates last year (YoY)

  • When comparison is active, each metric includes a comparison field with prior, delta, deltaPercent

Error Handling:

  • Rate limit (429): errorCode="RATE_LIMITED", message includes retry timing

  • Not found (404): errorCode="NOT_FOUND" if storeId doesn't exist

  • All errors: check structuredContent.errorCode and .retryable for programmatic handling

Inputs: to (required), from (required), storeId, aggregation, +2 more. Returns: error, warning, insights, errorCode, +7 more

pinmeto_get_facebook_ratingsFacebook ratingsA
Read-only

Fetch Facebook ratings for all locations, or a single location if storeId provided.

Error Handling:

  • Rate limit (429): errorCode="RATE_LIMITED", message includes retry timing

  • Not found (404): errorCode="NOT_FOUND" if storeId doesn't exist

  • All errors: check structuredContent.errorCode and .retryable for programmatic handling

Inputs: to (required), from (required), storeId, response_format. Returns: data, error, warning, cacheInfo, +3 more

pinmeto_get_google_insightsGoogle insightsA
Read-only

Fetch Google metrics for all locations, or a single location if storeId provided. Supports time aggregation (default: total) and period comparisons.

Comparison Options:

  • compare_with="prior_period": Compare with same-duration period before (MoM, QoQ)

  • compare_with="prior_year": Compare with same dates last year (YoY)

  • When comparison is active, each metric includes a comparison field with prior, delta, deltaPercent

Data Lag Warning:

  • Google data has ~10 day lag. Requests with recent end dates may return incomplete data.

  • Check structuredContent.warning and warningCode for data completeness.

Error Handling:

  • Rate limit (429): errorCode="RATE_LIMITED", message includes retry timing

  • Not found (404): errorCode="NOT_FOUND" if storeId doesn't exist

  • All errors: check structuredContent.errorCode and .retryable for programmatic handling

Inputs: to (required), from (required), storeId, aggregation, +2 more. Returns: error, warning, insights, errorCode, +7 more

pinmeto_get_google_keywordsGoogle search keywordsA
Read-only

Fetch Google keywords for all locations, or a single location if storeId provided.

Data Lag Warning:

  • Google data has ~10 day lag. Current month data may be incomplete.

  • Check structuredContent.warning and warningCode for data completeness.

Error Handling:

  • Rate limit (429): errorCode="RATE_LIMITED", message includes retry timing

  • Not found (404): errorCode="NOT_FOUND" if storeId doesn't exist

  • All errors: check structuredContent.errorCode and .retryable for programmatic handling

Inputs: to (required), from (required), storeId, response_format. Returns: data, error, errorCode, retryable

pinmeto_get_google_ratingsGoogle ratingsA
Read-only

Fetch Google rating statistics (averageRating, totalReviews, distribution) for all locations, or a single location.

Returns aggregate statistics only. For individual review text and sentiment analysis, use pinmeto_get_google_reviews.

Caching:

  • Results cached for 5 minutes (shared with reviews tool)

  • Use forceRefresh=true to bypass cache

  • Check structuredContent.cacheInfo for cache status

Data Lag Warning:

  • Google data has ~10 day lag. Requests with recent end dates may return incomplete data.

  • Check structuredContent.warning and warningCode for data completeness.

Error Handling:

  • Rate limit (429): errorCode="RATE_LIMITED", message includes retry timing

  • Not found (404): errorCode="NOT_FOUND" if storeId doesn't exist

  • All errors: check structuredContent.errorCode and .retryable for programmatic handling

Inputs: to (required), from (required), storeId, forceRefresh, +1 more. Returns: data, error, warning, cacheInfo, +3 more

pinmeto_get_google_review_insightsGoogle review analysisA
Read-only

Summarize Google reviews into rating and sentiment statistics.

Computes aggregates over the matched reviews server-side and returns the summary instead of the raw reviews, which is far more token-efficient than fetching them. The returned data is descriptive statistics, not LLM-written prose: read it and draw your own conclusions for the user.

Analysis Types:

  • summary: Average rating, sentiment breakdown, rating distribution

  • comparison: The above, plus per-location metrics ranked by rating

  • issues, trends, themes: Accepted, but currently return the same payload as summary. No theme extraction, issue clustering, or period comparison is performed, and the response is flagged with warningCode UNDIFFERENTIATED_ANALYSIS_TYPE. To analyze review text, fetch pinmeto_get_google_reviews and read it yourself.

Large Dataset Handling:

  • <200 reviews: Processed immediately

  • 200-1000: Processed with token estimate in metadata

  • 1000-10000: Returns warning with options (set skipConfirmation=true to proceed)

  • 10000: Requires sampling strategy (representative or recent_weighted)

Sampling Strategies (which reviews get analyzed):

  • full: Analyze all reviews (default for <10000 reviews)

  • representative: Stratified sample by rating and location

  • recent_weighted: Prioritize recent reviews

Caching:

  • Results cached for 1 hour

  • Use forceRefresh=true to bypass cache

When NOT to use this tool:

  • Need raw review text: Use pinmeto_get_google_reviews

  • Need only aggregate stats: Use pinmeto_get_google_ratings

  • Need specific review lookup: Use pinmeto_get_google_reviews with filters

Inputs: to (required), from (required), analysisType (required), themes, +7 more. Returns: data, error, warning, metadata, +6 more

pinmeto_get_google_reviewsGoogle reviewsA
Read-only

Fetch individual Google reviews with pagination and filtering for sentiment analysis.

For aggregate statistics (averageRating, totalReviews), use pinmeto_get_google_ratings instead.

Pagination:

  • limit: Max reviews to return (default: 50, max: 500)

  • offset: Skip first N reviews (for pagination)

  • Check hasMore in response to know if more pages exist

Filtering:

  • minRating/maxRating: Filter by rating range (1-5)

  • hasResponse: true for responded reviews, false for unresponded

Caching:

  • Results cached for 5 minutes (shared with ratings tool)

  • Use forceRefresh=true to bypass cache

  • Filters are applied client-side on cached data

Data Lag Warning:

  • Google data has ~10 day lag. Requests with recent end dates may return incomplete data.

Error Handling:

  • Rate limit (429): errorCode="RATE_LIMITED", message includes retry timing

  • Not found (404): errorCode="NOT_FOUND" if storeId doesn't exist

  • All errors: check structuredContent.errorCode and .retryable for programmatic handling

Inputs: to (required), from (required), limit, offset, +6 more. Returns: data, error, limit, offset, +7 more

pinmeto_get_locationGet locationA
Read-only

Get details for a SINGLE location by store ID. Returns structured location data including address, contact info, and network connections.

Error Handling:

  • Not found (404): errorCode="NOT_FOUND" if store ID doesn't exist

  • Auth failure (401): errorCode="AUTH_INVALID_CREDENTIALS"

  • All errors: check structuredContent.errorCode and .retryable for programmatic handling

Inputs: storeId (required), response_format. Returns: data, error, errorCode, retryable

pinmeto_get_locationsGet all locationsA
Read-only

Get ALL locations with pagination and filtering. Uses in-memory cache (5-min TTL) for fast queries on large datasets.

Examples:

  • Get first 50 locations: {}

  • Get next page: { offset: 50 }

  • Filter by city: { city: "Stockholm", limit: 20 }

  • Only open locations: { permanentlyClosed: false }

  • Force cache refresh: { forceRefresh: true }

Error Handling:

  • Partial results may be returned on API errors (check incomplete field)

  • Stale cache data returned with warning if fresh fetch fails

  • Check errorCode (string) and retryable (boolean) in structuredContent

Inputs: city, type, limit, fields, +5 more. Returns: data, error, limit, offset, +7 more

pinmeto_search_locationsSearch locationsA
Read-only

Search ALL locations by name, address, store ID, or location descriptor. Returns lightweight results for quick discovery. Use pinmeto_get_location with storeId for full details.

Error Handling:

  • Network issues: errorCode="NETWORK_ERROR", retryable=true

  • Auth failure (401): errorCode="AUTH_INVALID_CREDENTIALS"

  • All errors: check structuredContent.errorCode and .retryable for programmatic handling

Inputs: query (required), limit, response_format. Returns: data, error, hasMore, errorCode, +2 more

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 12 tools

    Disambiguation4/5

    Most tools target clearly distinct resources and actions, with useful cross-references between ratings, reviews, and review insights. The only mild ambiguities are google_review_insights vs. google_ratings and facebook_insights vs. facebook_brandpage_insights, though descriptions do provide enough guidance to separate them.

    Naming Consistency5/5

    Every tool follows the same pinmeto_get_<resource> pattern with snake_case naming. The lone action variation is search_locations, but it still fits the overall verb_noun convention and remains predictable.

    Tool Count5/5

    Twelve tools is well-scoped for a location data and platform-insights server. Each tool covers a distinct data area, and there is no obvious redundancy or bloat despite the range of Google, Facebook, and Apple data.

    Completeness3/5

    The server provides solid read coverage for locations and platform analytics, but it is entirely read-only with no create, update, or delete operations for locations. Some platform coverage is also uneven, such as Facebook reviews missing despite Google reviews being available.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      An MCP server that enables AI assistants to query databases, execute SQL, and manage Metabase resources like dashboards, cards, and collections through natural language.
      22
      MIT
    • -
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that bridges AI assistants with SQL databases, enabling natural language querying across multiple database types with built-in optimization and security.
      3
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      An MCP server that connects AI assistants to SEO platforms like Google Search Console, GA4, Bing Webmaster Tools, and Adobe Analytics, enabling natural language queries about SEO performance.
      1,377 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A unified MCP server that gives AI assistants direct access to Google Analytics 4, Google Search Console, Google Ads and Google Merchant Center data using OAuth2 user credentials.
      MIT