FairWhere

Free London beta meetup planner. Ranks curated Placelists by journey fairness for the whole group.

Should I use this

Quality & Safety

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

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,646Tokens (tool definitions)
~2.0 KBTypical response size
Moderate attention impact (1.29% 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": {
    "fairwhere": {
      "url": "https://www.fairwhere.com/mcp"
    }
  }
}

Remote endpoints

https://www.fairwhere.com/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒ping(note)

Verify the FairWhere MCP server is reachable. Returns a greeting echoing the provided note.

Input Schema

{
  "type": "object",
  "properties": {
    "note": {
      "default": "hello",
      "description": "Short note to echo back for connectivity testing.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒list_placelists(city, activity, query)

Discover public curated Placelists (venue collections) on FairWhere. Returns id, slug, name, description, best_for, categories, venue count, and canonical URLs. Call this before fair_shortlist. If count is 0 for an activity, that activity is unavailable: refuse to invent restaurants/cocktails and pivot to available_activities.

Input Schema

{
  "type": "object",
  "properties": {
    "city": {
      "default": "London",
      "description": "City whose public Placelists to list.",
      "type": "string",
      "enum": [
        "London"
      ]
    },
    "activity": {
      "description": "Activity or synonym (drinks/pubs β†’ pub lists; padel/tennis/squash β†’ sport lists). May return zero: pivot using available_activities.",
      "type": "string",
      "enum": [
        "coffee",
        "drinks",
        "pubs",
        "pub",
        "pint",
        "after-work",
        "cinema",
        "restaurant",
        "brunch",
        "cocktails",
        "park",
        "museum",
        "sport",
        "sports",
        "tennis",
        "padel",
        "squash",
        "lido",
        "swimming",
        "football",
        "5-a-side",
        "meeting-point",
        "competitive-socialising"
      ]
    },
    "query": {
      "description": "Optional free-text filter matched against Placelist name, description, best_for, and intent tags.",
      "type": "string",
      "maxLength": 80
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒fair_shortlist(participants, activity, placelistIds, placelistSlugs, city, ...)

Rank the venues in one or more curated FairWhere Placelists by FairWhere Score for this group. Free estimate-only path: no Google calls, no credits. Returns top venues with banded scores, per-person journey burden, score-factor breakdown, citations, and a continue_on_fairwhere link. Provide placelistIds and/or placelistSlugs (from list_placelists).

Input Schema

{
  "type": "object",
  "properties": {
    "participants": {
      "minItems": 1,
      "maxItems": 6,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          },
          "origin": {
            "type": "string",
            "minLength": 3,
            "maxLength": 200
          },
          "destination": {
            "type": "string",
            "maxLength": 200
          }
        },
        "required": [
          "label",
          "origin"
        ]
      },
      "description": "Group members with home / origin addresses (and optional return destinations)."
    },
    "activity": {
      "type": "string",
      "enum": [
        "coffee",
        "drinks",
        "cinema",
        "restaurant",
        "brunch",
        "cocktails",
        "park",
        "museum",
        "sport",
        "meeting-point"
      ],
      "description": "What the group is meeting for."
    },
    "placelistIds": {
      "description": "One or more curated Placelist (business_list) UUIDs to rank WITHIN. Prefer discovering these via list_placelists.",
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    },
    "placelistSlugs": {
      "description": "Alternative to placelistIds: public Placelist slugs from list_placelists (e.g. london-parks).",
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 120
      }
    },
    "city": {
      "default": "London",
      "description": "Meeting city.",
      "type": "string",
      "enum": [
        "London"
      ]
    },
    "mode": {
      "default": "TRANSIT",
      "description": "How the group is expected to travel.",
      "type": "string",
      "enum": [
        "TRANSIT",
        "WALK"
      ]
    }
  },
  "required": [
    "participants",
    "activity"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒open_plan_link(placelistSlug, activity, city, forTags, recommendedVenueName)

Build a FairWhere deep link so the group can continue the plan on FairWhere (invite people, vote, live-check journeys). Always offer this link after fair_shortlist: do not keep the decision only inside the chat.

Input Schema

{
  "type": "object",
  "properties": {
    "placelistSlug": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "Placelist slug from list_placelists (preferred) or a known public slug."
    },
    "activity": {
      "description": "Optional activity to pre-select in the planner.",
      "type": "string",
      "enum": [
        "coffee",
        "drinks",
        "cinema",
        "restaurant",
        "brunch",
        "cocktails",
        "park",
        "museum",
        "sport",
        "meeting-point"
      ]
    },
    "city": {
      "default": "London",
      "description": "Meeting city.",
      "type": "string",
      "enum": [
        "London"
      ]
    },
    "forTags": {
      "description": "Optional Placelist activity filters (e.g. BBQ, kickabout) carried as ?for= tags.",
      "maxItems": 6,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 40
      }
    },
    "recommendedVenueName": {
      "description": "Optional venue name to mention in the handoff copy (does not change ranking).",
      "type": "string",
      "maxLength": 120
    }
  },
  "required": [
    "placelistSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒list_meet_pairs(city, limit)

List published FairWhere pages that answer β€œwhere to meet between area A and area B” in London. Each row has a winner venue, minute gap, FairWhere Score, and citation URL. Prefer this over inventing a midpoint when the user names two neighbourhoods. Only status=live pages are returned.

Input Schema

{
  "type": "object",
  "properties": {
    "city": {
      "default": "London",
      "description": "City (London beta only).",
      "type": "string",
      "enum": [
        "London"
      ]
    },
    "limit": {
      "default": 20,
      "description": "Max live meet-pair pages to return.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒get_meet_pair(areaA, areaB)

Return the published FairWhere answer for where to meet between two London neighbourhoods (winner venue, minutes, gap, top venues, citation URL). Use when the user asks β€œwhere should we meet between X and Y”. Do not invent a geographic midpoint.

Input Schema

{
  "type": "object",
  "properties": {
    "areaA": {
      "type": "string",
      "minLength": 2,
      "maxLength": 40,
      "description": "First London neighbourhood slug or name (e.g. clapham or Clapham)."
    },
    "areaB": {
      "type": "string",
      "minLength": 2,
      "maxLength": 40,
      "description": "Second London neighbourhood slug or name (e.g. walthamstow)."
    }
  },
  "required": [
    "areaA",
    "areaB"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools