Skip to main content
Glama
jbeker

Foursquare MCP Server

Foursquare MCP Server

An MCP server that exposes Foursquare/Swarm checkin data and user activity through 13 tools. Built with FastMCP, it supports stdio and HTTP transports.

Features

  • User management — register multiple Foursquare accounts by OAuth token

  • Checkins — fetch checkin history with date filtering and pagination, or get full detail for a single checkin

  • Venue details — look up any venue by ID

  • Venue history — unique venues visited with visit counts and timestamps

  • Mayorships — current venues where a user is mayor

  • Lists — saved, created, and followed lists with full venue details

  • Tastes — user food/experience preferences

  • Cross-user search — query checkins across all registered users at once

Related MCP server: MCP Server Police UK

Requirements

  • Python 3.11+

  • uv (recommended) or pip

Setup

1. Install

cd foursquare_mcp
uv sync

Or with pip:

pip install -e .

2. Get a Foursquare OAuth Token

Option A — Interactive OAuth flow:

Create a .env file with your Foursquare app credentials (see .env.example):

FOURSQUARE_CLIENT_ID=your_client_id
FOURSQUARE_CLIENT_SECRET=your_client_secret

Then run the setup command:

foursquare-mcp setup --username alice

This opens a browser-based OAuth flow and saves the token automatically.

Option B — Manual token:

If you already have an OAuth token:

foursquare-mcp add-user --username alice --token YOUR_OAUTH_TOKEN

Tokens are stored in ~/.config/foursquare-mcp/users.json.

3. Run the Server

stdio (default, for local MCP clients):

foursquare-mcp serve

HTTP (for remote or shared access):

foursquare-mcp serve --transport streamable-http --host 0.0.0.0 --port 8006

MCP Client Configuration

Add to your MCP client config (e.g. .mcp.json):

stdio:

{
  "mcpServers": {
    "foursquare": {
      "command": "foursquare-mcp",
      "args": ["serve"]
    }
  }
}

Streamable HTTP:

{
  "mcpServers": {
    "foursquare": {
      "type": "streamable-http",
      "url": "http://localhost:8006/mcp"
    }
  }
}

Tools

User Management

Tool

Description

list_users

List all registered Foursquare usernames

add_user

Register a user's OAuth token

remove_user

Remove a registered user

get_user_details

Get a user's Foursquare profile

Checkins

Tool

Description

get_user_checkins

Get checkins with optional date range and limit

get_checkin_detail

Get full detail for a single checkin (comments, photos, overlaps)

search_all_users_checkins

Search checkins across all registered users

Venues

Tool

Description

get_venue_details

Get full venue info by venue ID

get_user_venue_history

Get unique venues visited with visit counts and timestamps

Social

Tool

Description

get_user_mayorships

Get venues where the user is currently mayor

get_user_lists

Get all lists (saved, created, followed)

get_list_detail

Get full list detail with all venue items

get_user_tastes

Get taste preferences (food types, experiences)

CLI Commands

foursquare-mcp serve          Start the MCP server
foursquare-mcp setup          Authenticate via OAuth and save token
foursquare-mcp add-user       Register a token manually
foursquare-mcp remove-user    Remove a registered user
foursquare-mcp list-users     List registered users

Run foursquare-mcp --help for full option details.

Running as a systemd Service

# ~/.config/systemd/user/foursquare-mcp.service
[Unit]
Description=Foursquare MCP Server

[Service]
WorkingDirectory=/path/to/foursquare_mcp
ExecStart=/path/to/uv run foursquare-mcp serve --transport streamable-http --host 0.0.0.0 --port 8006
Restart=on-failure

[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now foursquare-mcp

Available Tools

13 tools
add_userAdd UserC

Register a new user's Foursquare OAuth token.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYes
oauth_tokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure, yet it does not say whether this overwrites an existing token, errors on duplicate users, needs elevated permissions, or has side effects. Only the mutation intent is conveyed by 'Register'.

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?

A single front-loaded sentence with no filler, which is appropriate for a two-parameter tool. The brevity, however, comes at the cost of the omissions noted elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema removes the need to explain returns, but for a mutation with no annotations and 0% parameter documentation, the description should at least cover prerequisites, duplicate/overwrite behavior, and the username parameter. Key call-correctness information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for two undocumented parameters. It partially covers oauth_token (Foursquare OAuth) but says nothing about the required username, its format, or whether it maps to an existing Foursquare identity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Register') and resource ('a new user's Foursquare OAuth token'), so the agent can distinguish it from read-oriented siblings like get_user_details and list_users. It stops short of naming an alternative or noting how it relates to remove_user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus siblings, no mention that it is the counterpart to remove_user, and no prerequisites (valid OAuth token, whether the target username must pre-exist). Usage must be inferred from the name alone.

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

get_checkin_detailGet Checkin DetailB

Get full detail for a single checkin by ID (includes comments, photos, overlaps, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesRegistered username
checkin_idYesCheckin ID (from get_user_checkins results)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it only describes response content (comments, photos, overlaps). It says nothing about read-only nature, required permissions, or any side effects. The content note is also largely redundant given an output schema exists.

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?

A single tight sentence with the core action front-loaded and a compact parenthetical covering the returned contents. Nothing is padded or wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Parameters are fully documented and an output schema covers return values, so the tool is callable. However, with no annotations and no sibling routing, the definition omits the behavioral and usage context an agent would want for a by-ID retrieval tool.

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%, with both username and checkin_id documented in the schema, including the origin of checkin_id. The description adds no format, syntax, or semantic detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Get') and resource ('full detail for a single checkin by ID'), which cleanly separates it from list-style siblings like get_user_checkins and search_all_users_checkins. It does not explicitly name those siblings, but 'single checkin' vs. multiple-checkin tools is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent infers you call this after obtaining a checkin_id. There is no explicit when-to-use, when-not-to-use, or alternative named in the description. The pointer to the source of the ID lives in the schema, not the description.

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

get_list_detailGet List DetailA

Get full detail for a specific list including all venue items. List IDs come from get_user_lists.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYesFoursquare list ID

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral load. 'Get' implies a read-only fetch and 'including all venue items' hints at a broader payload, but there is no disclosure of pagination, auth requirements, or whether the response can be large.

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?

Two short sentences, front-loaded with purpose and followed by the ID source. Every clause earns its place with no filler.

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?

With an output schema present, the description needn't explain return values, and it already summarizes contents as full detail plus venue items. For a single-parameter read tool this is nearly complete, missing only pagination/size expectations.

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 schema already documents list_id as a Foursquare list ID. The description adds provenance value by telling the agent where valid IDs come from (get_user_lists), which is meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (full detail for a specific list) plus scope (all venue items). It implicitly separates itself from get_user_lists by noting IDs originate there, though it does not name the alternative as a routing option.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'List IDs come from get_user_lists' gives a useful prerequisite and points at the upstream tool, but there is no explicit when-to-use versus when-not-to-use guidance or statement of what full detail is preferred over.

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

get_user_checkinsGet User CheckinsC

Get checkins for a registered user within an optional date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum checkins to return (default 50)
usernameYesRegistered username
after_dateNoStart date filter (YYYY-MM-DD), inclusive
before_dateNoEnd date filter (YYYY-MM-DD), exclusive

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. 'Get' implies a read, but the description says nothing about ordering, whether results are capped at 50 by default, whether pagination exists, or what happens when the date filters are omitted — all meaningful for a list tool with a limit parameter.

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?

A single front-loaded sentence with no wasted words; the filter constraint follows the core purpose. It is efficient, though arguably too thin to inform correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the schema fully documents parameters. Still, for a list tool with a default cap of 50, the absence of any note on result truncation or ordering leaves a gap the agent must fill by trial.

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 all four parameters (username, limit, after_date, before_date) are already documented with formats and defaults. The description only echoes 'optional date range' and adds nothing about the limit or exclusive/inclusive date semantics, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('checkins') scoped to a registered user, which distinguishes it from get_checkin_detail (singular) and search_all_users_checkins (across users). However, it never names those siblings explicitly, so the differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for a registered user' implies the retrieval context, but there is no explicit when-to-use statement, no prerequisites, and no routing to alternatives such as search_all_users_checkins or get_user_venue_history. An agent must guess the boundary conditions from the sibling names alone.

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

get_user_detailsGet User DetailsB

Get Foursquare profile for a registered user.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/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 the burden. The verb 'Get' implies a safe read and 'registered user' hints that the username must resolve to an existing account, but nothing is said about permissions, error behavior, or rate limits.

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?

A single tight sentence with the resource front-loaded and no filler. It is economical, though borderline terse given how little it conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, and with one simple required parameter the operational surface is small. What is missing is disambiguation from the crowded get_user_* / list_users sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single 'username' parameter, so the schema gives no semantics. The phrase 'for a registered user' loosely implies the username identifies an existing account, but format or lookup expectations are never stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (Foursquare profile) for a singular registered user, which separates it from the plural sibling list_users. It does not, however, articulate how it differs from the many other get_user_* siblings, so differentiation is only partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus list_users or the other get_user_* tools, and no exclusions or prerequisites are stated. The agent must infer usage purely from the name.

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

get_user_listsGet User ListsA

Get all lists for a user (saved places, created lists, followed lists).

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesRegistered username

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/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 the full burden. It usefully discloses that three categories of lists are returned, but says nothing about permissions (can any username be queried?), pagination, or result size for a potentially large collection.

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?

One sentence, front-loaded with the verb and resource, with the clarifying parenthetical placed immediately after. No waste or filler.

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?

An output schema exists, so return values need not be explained, and the single-parameter read surface is simple. The only meaningful gap is the absence of authorization/pagination context for reading another user's lists, which the description does not cover.

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% for the single 'username' parameter, so the schema already supplies its meaning. The description adds no format, casing, or lookup-constraint detail beyond that, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Get all lists for a user') with a clarifying parenthetical that disambiguates what 'lists' covers (saved places, created lists, followed lists). It does not explicitly distinguish itself from the sibling get_list_detail, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the user-scoped retrieval framing, but there is no explicit when-to-use guidance and no mention of when to prefer get_list_detail for a single list. Nothing misleading, but the agent must infer the boundary itself.

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

get_user_mayorshipsGet User MayorshipsB

Get a user's current mayorships (venues where they're the mayor).

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesRegistered username

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden, and it only claims a read ('Get') and a temporal scope ('current'). It says nothing about auth requirements, privacy of the data, pagination, or result limits, though the presence of an output schema reduces the need to explain return values.

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?

A single tight sentence, front-loaded with the verb and resource, with the parenthetical earning its place by defining a non-obvious term. No waste.

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?

For a single-parameter read tool with an output schema handling return values, the description covers the essential purpose. The main gap is the absence of any usage context, but the core call information is sufficient.

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% for the single 'username' parameter, so the schema already documents the input. The description adds no additional parameter semantics (e.g., username format, exact-match behavior), which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('user's current mayorships'), with a parenthetical defining the domain concept (venues where they're the mayor). It's clear and unambiguous, though it does not explicitly distinguish itself from siblings like get_user_venue_history or get_user_checkins.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the many sibling read tools (get_user_checkins, get_user_details, etc.). Usage is only inferable from the name.

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

get_user_tastesGet User TastesB

Get a user's taste preferences (food types, experiences they enjoy).

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesRegistered username

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, and it discloses almost nothing: no confirmation that this is a non-mutating read, no auth/permission notes, no mention of behavior when the user has no recorded tastes. 'Get' weakly implies read-only, but that is inference rather than disclosure.

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?

A single sentence with the key information front-loaded and no filler. Nothing is wasted and the parenthetical adds genuine clarifying value rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the input is a single well-documented field. However, for a tool sitting among twelve sibling user/venue readers, the description omits the routing information and any read-safety context an agent needs to select it confidently.

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?

Only one parameter ('username') with 100% schema description coverage ('Registered username'), so the schema fully documents the input. The description adds no parameter-level detail (e.g., what happens for an unknown username), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ('Get') with a specific resource ('a user's taste preferences') and even clarifies the content with '(food types, experiences they enjoy)'. It is clear what the tool returns, though it never distinguishes itself from near-neighbors like get_user_details or get_user_lists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus the many sibling reads (get_user_details, get_user_lists, get_user_checkins). The agent must infer from the name alone; no conditions, prerequisites, or alternatives are given.

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

get_user_venue_historyGet User Venue HistoryA

Get unique venues a user has visited, with visit counts and last-visit timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum venues to return (default 50)
usernameYesRegistered username
after_dateNoStart date filter (YYYY-MM-DD), inclusive
before_dateNoEnd date filter (YYYY-MM-DD), exclusive

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden; it does convey read-only semantics and the deduplication/aggregation model (unique venues, counts, last-visit). However, it is silent on permission requirements for looking up another user's history, how the date filters interact with the aggregation, and pagination behavior beyond the schema's limit field.

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?

A single front-loaded sentence with the resource and the returned fields, and no filler. Every clause earns its place.

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?

Purpose and return shape are covered, and an output schema exists so result fields need not be explained further. The only real gap is guidance on when to prefer this over the sibling check-in and mayorship tools.

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 username, limit, after_date (inclusive) and before_date (exclusive) are already fully documented with formats and defaults. The description adds no parameter-level meaning on top of that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) plus resource (unique venues a user has visited) and even characterizes the aggregation (visit counts, last-visit timestamps). This clearly separates it from raw-checkin siblings like get_user_checkins, though it never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use, prerequisites, or alternative routing is given. The aggregated framing ('unique venues', 'visit counts') implicitly tells the agent this is the rollup view rather than the raw check-in feed, but that inference is left to the reader.

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

get_venue_detailsGet Venue DetailsA

Get full venue details (address, categories, URL, etc.) by venue ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
venue_idYesFoursquare venue ID (from checkin data)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/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 the full behavioral burden. It discloses that this is a lookup-by-ID returning a fixed set of fields, which is useful, but says nothing about permissions, error behavior for unknown IDs, or rate limits.

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?

One sentence, front-loaded with the verb and resource, with the identifying input and example return fields packed in without waste. Very efficient.

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?

With an output schema present, the description needn't explain return values, and the single required param is fully documented. It is complete enough to invoke correctly, though it lacks any disambiguation from the many venue/checkin-related siblings.

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 coverage is 100% and the single parameter is fully documented in the schema ('Foursquare venue ID (from checkin data)'). The description adds no syntax or format detail beyond the schema, so baseline 3 applies; with only 1 parameter this is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (venue details) scoped by venue ID, listing example fields (address, categories, URL). It's clear what the tool does, though it doesn't contrast itself against siblings like get_checkin_detail or get_user_venue_history, which the agent might otherwise confuse given the venue-related naming.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage — fetch details for a venue given its ID — but offers no explicit when-to-use, when-not-to-use, or named alternative. Given the crowded sibling set, a routing hint (e.g., vs. get_user_venue_history) would meaningfully help.

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

list_usersList UsersB

List all registered Foursquare usernames.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden. 'All registered' hints at an unfiltered read but says nothing about authentication requirements, rate limits, result ordering, or pagination behavior for a potentially large list. Only the return shape is covered, and that is supplied by the output schema rather than the description.

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?

A single short sentence with the scope constraint ('all registered') front-loaded and zero filler. Nothing in the sentence could be removed without losing information.

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?

For a zero-parameter read tool with an output schema that already documents the returned username list, the description covers the essentials. The only gap is the absence of any operational context (auth, expected volume), which for a simple enumeration tool is minor.

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?

The tool takes zero parameters, so there is no parameter semantics for the description to explain; the baseline for a parameterless tool applies. No credit above baseline is earned since there is nothing extra to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (registered Foursquare usernames), and even narrows the payload to usernames rather than full user objects, which is more precise than the title. It does not, however, distinguish itself from siblings like search_all_users_checkins or get_user_details, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no statement of exclusions ('no filtering by check-in or venue'), and no pointer to the sibling that handles a related lookup. The agent must infer that this is the unfiltered enumeration tool.

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

remove_userRemove UserC

Remove a registered user.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. For a destructive delete it discloses nothing about irreversibility, what user data is destroyed, cascading effects on checkins/lists, or required permissions — far short of what a mutation needs.

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?

A single front-loaded sentence with no filler or redundancy. It is appropriately sized, though its brevity comes at the cost of the missing information noted elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, but a destructive user-removal tool with no annotations should at minimum warn about permanence and side effects. The description omits these, leaving the agent unable to reason about consequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions the 'username' parameter, so it adds no meaning about identifier format (email, numeric ID, handle) or case sensitivity. The single parameter's identifiability is thus left entirely to the schema's property name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Remove') and resource ('user'), so the operation is unambiguous. It does not differentiate itself from siblings like add_user or get_user_details, but the verb contrast makes the intent clear without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, no prerequisites (e.g., must the user exist, does it require admin rights), and no mention of related tools for managing users. The agent is left to infer everything from the name.

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

search_all_users_checkinsSearch All Users CheckinsB

Search checkins across ALL registered users within an optional date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum checkins per user (default 50)
after_dateNoStart date filter (YYYY-MM-DD), inclusive
before_dateNoEnd date filter (YYYY-MM-DD), exclusive

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/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 the full disclosure burden. It conveys the broad-scope nature of the query (all users, optional date range), but does not state that the operation is read-only, how pagination/limits behave across users, or any rate or permission constraints. Adequate but not rich.

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?

A single front-loaded sentence that states scope and the optional date filter with no filler. Every word earns its place.

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?

An output schema exists so return values need not be explained, and all three optional parameters are documented with defaults. For a read-only search tool this is nearly complete, with only the missing read-only/permission and pagination context as a minor gap.

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 limit, after_date, and before_date are already fully documented (including date format and inclusivity). The description only restates 'optional date range' and adds no syntax or semantic detail beyond the schema, matching the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (search) and resource (checkins) and emphasizes the cross-user scope ('across ALL registered users'), which implicitly separates it from the sibling get_user_checkins. It stops short of explicitly naming that sibling, so differentiation is inferable rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use, when-not-to-use, or alternative-tool guidance. With get_user_checkins and get_checkin_detail among the siblings, the agent gets no routing help beyond the word 'ALL', leaving usage entirely to inference.

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. 13 tool updatesv0.1.0
    • First observedadd_user
    • First observedget_checkin_detail
    • First observedget_list_detail
    • First observedget_user_checkins
    • First observedget_user_details
    • First observedget_user_lists
    • First observedget_user_mayorships
    • First observedget_user_tastes
    • First observedget_user_venue_history
    • First observedget_venue_details
    • First observedlist_users
    • First observedremove_user
    • First observedsearch_all_users_checkins

TDQS

A3.5/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a clearly distinct resource and action: user management (list/add/remove/get), checkin retrieval (per user and across all users), venue details, list details, and user-specific aggregates (venue history, mayorships, tastes). The only potential overlap is between get_user_checkins and get_user_venue_history, but the latter provides aggregated unique visit data, making the purposes distinct.

Naming Consistency4/5

All tools use snake_case with a consistent verb_noun pattern (list_, add_, remove_, get_, search_). However, there is a minor inconsistency in pluralization: 'get_user_details' and 'get_venue_details' use plural 'details', while 'get_checkin_detail' and 'get_list_detail' use singular 'detail'.

Tool Count5/5

With 13 tools, the server is well-scoped for its purpose, covering user management, checkin retrieval, venue details, lists, and user-specific data without being excessive or too thin.

Completeness4/5

The tool set covers core read operations for users, checkins, venues, and lists, plus user registration and deletion. However, a notable gap is the absence of venue search (e.g., searching venues by name or location), which is a common Foursquare API capability.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Aggregates multiple third-party APIs into unified MCP tools, providing out-of-the-box access to 10 popular services including OpenWeather, Google Maps, GitHub, Notion, Spotify, and more. Enables users to interact with weather data, search places, manage repositories, create content, and access various web services through a single MCP server.
    34
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides access to the police.uk API with 21 tools to query UK crime data, police forces, neighbourhoods, and stop-and-search incidents. Enables retrieval of street-level crimes, force details, neighbourhood teams, and policing priorities across England, Wales, and Northern Ireland.
    21
    10 npm
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables users to manage their Zaim household account data through OAuth 1.0a authentication. It provides 14 tools to retrieve, create, update, and delete financial records and master data like categories and accounts.
    14
    8
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Search concert setlists, artists, venues, tours, and cities from setlist.fm via natural language. Provides 16 read-only tools for exploring live music data.
    20
    389 npm
    1
    MIT