ReputeMap

Read and filter your Google Business Profile reviews, get stats, and send review requests.

Should I use this

Quality & Safety

A
Description quality
93%
Schema completeness
74%
Naming quality
97%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'get_usage' description lacks action verbin get_usage

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,158Tokens (tool definitions)
~793 BTypical response size
Moderate attention impact (0.90% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "reputemap": {
      "command": "npx",
      "args": [
        "@reputemap/mcp"
      ]
    }
  }
}

Runnable packages

npm@reputemap/mcp0.1.0stdio

Remote endpoints

https://api.reputemap.com/mcpstreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_locations

List every business location this ReputeMap org manages, with ids to use in the other tools.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢list_reviews(location_id, rating_min, rating_max, unanswered_only, since_days, ...)

List Google reviews for the org (newest first) with the published reply text inlined. Filter by location, star-rating range, replied/unreplied, or a trailing day window. Google moderates owner replies: reply_state is approved, pending (Google is checking it) or rejected (not shown on Google - has_reply is false and reply_policy_violation says why; write a new reply).

Input Schema

{
  "type": "object",
  "properties": {
    "location_id": {
      "type": "string",
      "description": "UUID from list_locations; omit for all locations"
    },
    "rating_min": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5
    },
    "rating_max": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5
    },
    "unanswered_only": {
      "type": "boolean",
      "description": "true = only reviews without an owner reply on Google (a reply Google rejected counts as none)"
    },
    "since_days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 365,
      "description": "only reviews from the last N days"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    }
  },
  "additionalProperties": false
}
🟢get_review_stats(location_id, days)

Review stats per location and org totals: review counts, average rating, 1-5 star breakdown, unanswered count, and activity in the trailing window (default 30 days).

Input Schema

{
  "type": "object",
  "properties": {
    "location_id": {
      "type": "string",
      "description": "UUID from list_locations; omit for all locations"
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 365,
      "default": 30
    }
  },
  "additionalProperties": false
}
🟡send_review_request(location_id, email, name)

Send ONE review-request email to a real customer, through ReputeMap's campaign engine (respects unsubscribes and the suppression list). This emails a real person - only use it when the user explicitly asks to request a review. Returns status 'sent', 'skipped' (opted out or suppressed), 'already_requested' (this location already asked this address - no second email is sent and no credit is spent) or 'failed'.

Input Schema

{
  "type": "object",
  "properties": {
    "location_id": {
      "type": "string",
      "description": "UUID from list_locations"
    },
    "email": {
      "type": "string",
      "description": "customer email address"
    },
    "name": {
      "type": "string",
      "description": "customer name (optional)"
    }
  },
  "required": [
    "location_id",
    "email"
  ],
  "additionalProperties": false
}
🟡draft_reply(review_id, instructions)

Generate 2-3 reply drafts for one review using ReputeMap's tuned generator (the same one the app uses, with the business's saved voice and sign-off), and save the draft so it appears in the app's editor. NEVER publishes anything - drafts only.

Input Schema

{
  "type": "object",
  "properties": {
    "review_id": {
      "type": "string",
      "description": "UUID from list_reviews"
    },
    "instructions": {
      "type": "string",
      "maxLength": 300,
      "description": "optional one-off guidance for this draft, e.g. 'mention the new units' or 'keep it under 40 words'"
    }
  },
  "required": [
    "review_id"
  ],
  "additionalProperties": false
}
🔴publish_reply(review_id, text)

PUBLISH a reply to this review's public Google profile. This is a public, customer-visible action - call it ONLY when the user has explicitly approved this exact text. If Google refuses the request, the text is preserved in ReputeMap with a manual fallback (status 'manual_required') - words are never lost. Google also moderates replies: google_state 'pending' = it is checking the reply before showing it; status 'rejected_by_google' = it will not show it (policy_violation and detail say why) - write a different reply.

Input Schema

{
  "type": "object",
  "properties": {
    "review_id": {
      "type": "string",
      "description": "UUID from list_reviews"
    },
    "text": {
      "type": "string",
      "description": "the exact reply text the user approved"
    }
  },
  "required": [
    "review_id",
    "text"
  ],
  "additionalProperties": false
}
🟢get_usage

Current month's API credit usage for this org (shared between the REST API and MCP tools).

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools