Local Logic MCP Server
The Local Logic MCP Server lets AI assistants and agents query Local Logic's location intelligence directly β neighborhood scores, demographics, points of interest, schools, commute times, and more β using natural language, through the open Model Context Protocol (MCP).
Once connected, tools like Claude, Cursor, and other MCP-compatible clients can answer questions like "Which neighborhoods in Montreal are most similar to Little Italy?" or "What drives property values in this ZIP code?" by calling Local Logic data in real time β without building a custom integration to Local Logic's APIs.
Key characteristics:
- Hosted (remote) server. There is nothing to install or run locally. Local Logic hosts and operates the server; you connect your MCP client to a URL.
- Read-only. All tools retrieve data. The server cannot create, modify, or delete anything in your account or in Local Logic systems.
- US and Canada coverage. Same geographic coverage as the underlying Local Logic APIs. Some tools are US-only (noted in the tool reference).
Server detailsβ
| Server URL | https://api.locallogic.co/mcp |
| Transport | Streamable HTTP, operating statelessly β each request is self-contained, so no Mcp-Session-Id handshake is required. Responses are server-sent-event framed; send Accept: application/json, text/event-stream. The deprecated HTTP+SSE transport (2024-11-05) is not supported, and the server does not emit progress notifications. |
| Authentication | A dedicated MCP key in an Authorization: MCP <key> request header β see Authentication. This is a separate credential from the API key used by the REST API and SDKs. |
| Access | Access to specific MCP tools and geographic areas is based on your underlying access to Local Logic's API products. The permissions required for each tool are outlined below. |
Quickstartβ
Choose your client below. All clients connect to the same remote server URL.
You will need an MCP key β a credential dedicated to this server, distinct from the API key you use for the REST API or SDKs. See Authentication to request one. Every client sends it in an Authorization: MCP <key> header.
- Claude Code
- Cursor
- VS Code
- Codex CLI
- Claude.ai
- Claude Desktop
- ChatGPT
- Other clients
claude mcp add local-logic --transport http https://api.locallogic.co/mcp \
--header "Authorization: MCP $LOCAL_LOGIC_MCP_KEY"
To share the server with a project's collaborators instead, add it to a .mcp.json file at the root of the repository:
{
"mcpServers": {
"local-logic": {
"type": "http",
"url": "https://api.locallogic.co/mcp",
"headers": {
"Authorization": "MCP ${LOCAL_LOGIC_MCP_KEY}"
}
}
}
}
Claude Code expands ${LOCAL_LOGIC_MCP_KEY} from the environment at load time, so the key itself stays out of the file and the file is safe to commit.
Start a session and run /mcp to confirm the server is connected and its tools are listed.
Add the following to ~/.cursor/mcp.json (or your project's .cursor/mcp.json):
{
"mcpServers": {
"local-logic": {
"url": "https://api.locallogic.co/mcp",
"headers": {
"Authorization": "MCP <your-mcp-key>"
}
}
}
}
Add the server to .vscode/mcp.json in your workspace, or to your user profile's mcp.json to make it available everywhere:
{
"servers": {
"local-logic": {
"type": "http",
"url": "https://api.locallogic.co/mcp",
"headers": {
"Authorization": "MCP <your-mcp-key>"
}
}
}
}
The top-level key is servers, not mcpServers, and "type": "http" is required. Copying a Cursor or Claude Code config verbatim will not work.
To keep the key out of the file, declare an input and reference it from the header. VS Code prompts for the value the first time the server starts:
{
"inputs": [
{
"type": "promptString",
"id": "local-logic-mcp-key",
"description": "Local Logic MCP key",
"password": true
}
],
"servers": {
"local-logic": {
"type": "http",
"url": "https://api.locallogic.co/mcp",
"headers": {
"Authorization": "MCP ${input:local-logic-mcp-key}"
}
}
}
}
You can also scaffold the file from the Command Palette (Cmd/Ctrl+Shift+P) with MCP: Add Server.
Add the server to ~/.codex/config.toml:
[mcp_servers.local_logic]
url = "https://api.locallogic.co/mcp"
http_headers = { "Authorization" = "MCP <your-mcp-key>" }
To keep the key out of the file, use env_http_headers instead β it maps a header name to the name of an environment variable Codex reads at startup:
[mcp_servers.local_logic]
url = "https://api.locallogic.co/mcp"
env_http_headers = { "Authorization" = "LOCAL_LOGIC_MCP_AUTH" }
Set LOCAL_LOGIC_MCP_AUTH to the full header value, including the scheme: MCP <your-mcp-key>.
Codex applies configured headers before it attempts any OAuth flow of its own, so no further authentication setup is needed. Run codex mcp list to confirm the server is registered.
These steps need the Request headers field in Claude's Add custom connector dialog. That field is part of a gradual Anthropic rollout and is not yet available on most plans, including Pro, Team, and Max.
Open the dialog and expand Advanced settings. If you see only OAuth Client ID and OAuth Client Secret and no Request headers section, the field has not reached your account and this connector cannot be configured yet β the OAuth fields are for MCP servers that run their own authorization server and cannot carry an MCP key.
In the meantime, Claude Code, Cursor, VS Code, and Codex CLI are unaffected β they read local config files rather than this dialog, and work today. If claude.ai connector support is blocking you, tell us at support@locallogic.co; it helps us prioritize.
Team and Enterprise plans β an Owner or Primary Owner must add the connector:
- Go to Admin settings β Connectors.
- Select Add custom connector.
- Enter the server URL:
https://api.locallogic.co/mcp - Open Request headers and add
Authorizationwith the valueMCP <your-mcp-key>. - Select Add.
Individual team members then go to Settings β Connectors, find the connector labelled Custom, and select Connect. They do not need the key.
Free, Pro, and Max plans β same steps, under Settings β Connectors instead of Admin settings.
Claude Desktop uses the same connector mechanism as Claude.ai β the configuration lives in your Anthropic account and Anthropic's cloud makes the request to our server, so the desktop app being local makes no difference here.
That means it carries the same limitation: the Request headers field must be present in your dialog. See the warning in the Claude.ai tab, and check Advanced settings before following these steps.
Where the field is available, add the connector through Settings β Connectors β Add custom connector, following the Claude.ai steps β including the Authorization request header.
The ChatGPT app cannot connect to this server today.
ChatGPT's custom connectors authenticate with OAuth or with no authentication at all β there is no field for an API key or a custom request header. Because the Local Logic MCP Server requires an Authorization: MCP <key> header and does not operate an OAuth authorization server, there is no supported way to configure it as a ChatGPT connector. This is a limitation of what ChatGPT accepts, not something a different Local Logic credential can work around.
If you are building on OpenAI models, both of these paths work today:
- Codex CLI β see the Codex CLI tab; it accepts custom headers.
- OpenAI Responses API β pass the key through the
mcptool'sheadersfield. See OpenAI and Anthropic APIs.
Contact support@locallogic.co if ChatGPT app support matters for your use case β it helps us prioritize.
Any MCP-compatible client that supports remote servers over Streamable HTTP can connect using the server URL and the Authorization header above.
If your client only supports the older stdio transport, you can bridge to the remote server with mcp-remote:
{
"mcpServers": {
"local-logic": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://api.locallogic.co/mcp",
"--header", "Authorization: MCP <your-mcp-key>"
]
}
}
}
Verify the connectionβ
Ask your assistant something simple, for example:
"Using Local Logic, what are the quality-of-life scores for the Plateau-Mont-Royal in Montreal?"
You should see the client call search_geographies followed by get_scores.
Many clients select MCP tools on their own. Naming Local Logic in the prompt, as above, removes any ambiguity while you are verifying the connection.
Authentication and authorizationβ
The Local Logic MCP Server authenticates with a dedicated MCP key β a credential issued specifically for this server, separate from the API key you use for the REST API or client-side SDKs. Request one from support@locallogic.co; we provision it against your account and it does not expire.
Your MCP key is not interchangeable with your Local Logic API key: each is only accepted at the endpoint it was issued for. This is intentional. SDK-issued API keys are designed to run in a browser, where anyone can read them out of network traffic β fine for the SDK's own scoped use, but not a credential you want to also unlock an MCP server with. Keeping the two separate means a key exposed on a public web page can never be used to call your MCP tools.
There is one exception. The Anthropic Messages API accepts only Bearer tokens, so on that surface you must first exchange your client credentials for an OAuth access token β see OpenAI and Anthropic APIs.
Supply the key in an Authorization request header:
Authorization: MCP <your-mcp-key>
MCP, not V3 or BearerEnter the value exactly as shown, including the space after MCP. Your Local Logic API key (the V3 <key> scheme used by the REST API and SDKs) is not accepted here β sending V3 <your-api-key> will fail authentication. Bearer is reserved for short-lived OAuth access tokens; see OpenAI and Anthropic APIs.
One key for your whole organizationβ
The MCP server uses organization-level authentication. An administrator configures the connector once with your organization's MCP key, and everyone on the team can use it β individual users do not sign in, and never see or handle the key.
This applies wherever a shared configuration is possible: a Claude.ai or Claude Desktop connector (subject to the Request headers availability noted above), a committed .mcp.json or .cursor/mcp.json, or your own backend calling a platform API.
On Claude Team and Enterprise plans, only an Owner or Primary Owner can add a custom connector:
- An Owner or Primary Owner adds the connector under Admin settings β Connectors, entering the server URL and the
Authorizationheader. - Members then go to Settings β Connectors, find it labelled Custom, and select Connect.
Because a single key represents the whole organization, usage is attributed at the organization level rather than per individual user.
Entering the key in your clientβ
- Claude Code
- Cursor
- VS Code
- Codex CLI
- Claude.ai / Claude Desktop
- Direct HTTP
claude mcp add local-logic --transport http https://api.locallogic.co/mcp \
--header "Authorization: MCP $LOCAL_LOGIC_MCP_KEY"
{
"mcpServers": {
"local-logic": {
"url": "https://api.locallogic.co/mcp",
"headers": {
"Authorization": "MCP <your-mcp-key>"
}
}
}
}
{
"servers": {
"local-logic": {
"type": "http",
"url": "https://api.locallogic.co/mcp",
"headers": {
"Authorization": "MCP <your-mcp-key>"
}
}
}
}
In ~/.codex/config.toml:
[mcp_servers.local_logic]
url = "https://api.locallogic.co/mcp"
http_headers = { "Authorization" = "MCP <your-mcp-key>" }
In the Add custom connector dialog, open the Request headers section and add:
| Header name | Value |
|---|---|
Authorization | MCP <your-mcp-key> |
Claude stores the value securely, does not display it again after saving, and sends it on every request to the server.
Request header authentication is in beta and being slowly rolled out; you may need to contact Anthropic for early access.
curl https://api.locallogic.co/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: MCP $LOCAL_LOGIC_MCP_KEY" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
OpenAI and Anthropic APIsβ
If you are building your own product on OpenAI or Anthropic models, you can have the model provider connect to our server on your behalf, rather than configuring an MCP client yourself. Each provider takes a different credential, for reasons outside our control.
OpenAI Responses APIβ
The mcp tool accepts arbitrary headers, so pass your MCP key directly:
{
"type": "mcp",
"server_label": "local_logic",
"server_url": "https://api.locallogic.co/mcp",
"headers": { "Authorization": "MCP <your-mcp-key>" },
"require_approval": "never"
}
OpenAI discards header values after each request and retains only the scheme and domain of server_url, so include the headers block every time you configure the MCP tool rather than treating it as stored configuration.
The headers field is documented in the Responses API reference rather than the prose guide, which mentions only authorization.
This is a different surface from the ChatGPT app, which cannot connect to this server β see the ChatGPT tab in the Quickstart. Building on OpenAI models through the Responses API is fully supported; installing the server as a ChatGPT connector is not.
Anthropic Messages APIβ
The MCP connector exposes a single authorization_token field and no custom headers. Anthropic sends that value to our server as Authorization: Bearer <authorization_token>, adding the Bearer prefix for you.
This is the one surface where neither your Local Logic API key nor your MCP key works: Anthropic always sends Bearer, and neither the V3 nor the MCP scheme can be expressed here. Use an access token from the client-credentials flow instead β POST https://api.locallogic.co/oauth/token with your client_id and client_secret, then pass the returned access_token as authorization_token.
A server definition must be paired with an mcp_toolset entry in tools that references it by name. Sending mcp_servers on its own is a validation error:
{
"mcp_servers": [
{
"type": "url",
"url": "https://api.locallogic.co/mcp",
"name": "local_logic",
"authorization_token": "<your-access-token>"
}
],
"tools": [
{ "type": "mcp_toolset", "mcp_server_name": "local_logic" }
]
}
Send this with the anthropic-beta: mcp-client-2025-11-20 header. Check Anthropic's documentation for the current beta identifier before you build β this feature is in beta and an earlier version, mcp-client-2025-04-04, is already deprecated.
Pass the token on its own β do not prepend Bearer yourself, or the header arrives double-prefixed and authorization fails. Access tokens expire, so fetch a fresh one rather than storing it as static configuration; see Getting Started for the request shape, lifetime, and how client_id / client_secret are provisioned.
Permissions modelβ
The MCP server is read-only by design: no tool can write, update, or delete data. Access to individual tools mirrors your API entitlements. If your contract does not include Demographics, demographics tools return an authorization error. If your contract only allows you access to data for South Carolina, data in Tennessee will not be returned.
MCP access is additive to your existing entitlements: your account must have the MCP product enabled, and your existing per-product permissions then determine which tools you can call through it. Contact support@locallogic.co to enable MCP on your account and receive your MCP key.
Tool referenceβ
22 tools return data today, grouped below by product area. Coverage is US and Canada.
Your client's tool list will show more than 22. Some roadmap tools are already registered on the server, so they appear in tools/list and your assistant can call them β they respond with "available": false rather than data. Others are not registered at all and will be absent from the list entirely. Both kinds carry a Coming soon marker below; everything unmarked is live.
The practical consequence: count the unmarked tools, not the entries in your client's tool picker, when checking what your connection can do.
Tool availability also varies by contract entitlement β see Permissions model. Several tools combine more than one product in a single call, and need all of the listed permissions to succeed; they return an authorization error rather than a partial result if any one is missing.
Geography lookup and searchβ
| Tool | What it does | Permissions required |
|---|---|---|
search_geographies | Search for geographies by name (city, neighborhood, region) and return matches with IDs. | Geographies |
get_geographies | Return the named geographies containing a coordinate, from smallest to largest. | Geographies |
get_geography | Return details for a single geography by its geog_id. | Geographies |
get_location | Return the country and state/province for a coordinate. | Geographies |
list_neighborhoods_in_geography Coming soon | List all active neighborhoods within a city or metro. | Geographies |
Scores, profiles, and measuresβ
| Tool | What it does | Permissions required |
|---|---|---|
get_scores | Quality-of-life scores (0β5 scale) for a location. | Location Scores |
get_neighborhood_profile | Narrative profile of a neighborhood. | Profiles |
get_measures | 50+ fine-grained proximity and access measures for a coordinate. | Location Snapshot |
get_typologies | Built-environment typology for a coordinate. | Typologies |
get_value_drivers | Top features driving property values in a neighborhood. | Value Drivers |
rank_neighborhoods_by_score Coming soon | Top neighborhoods in a city or metro, ranked by a Local Logic score. | Location Scores |
find_neighborhoods_by_score_threshold Coming soon | Neighborhoods in a city meeting a minimum score threshold. | Location Scores |
Similar neighborhoods and matchingβ
| Tool | What it does | Permissions required |
|---|---|---|
get_similar_neighborhoods | Neighborhoods most similar to a given geography, within the same metro (or 100 km). | Similar Neighborhoods |
get_affordable_alternatives | Similar neighborhoods enriched with scores and a housing profile, filtered for affordability. | Similar Neighborhoods Location Scores Profiles Market Stats |
get_neighborhood_comparison | Side-by-side comparison of two neighborhoods (scores, profile, demographics, POIs). | Location Scores Profiles Demographics POIs |
get_similar_neighborhoods_in_geography Coming soon | Most similar neighborhoods within a destination city or metro. | Similar Neighborhoods |
get_similar_neighborhoods_by_commute Coming soon | Similar neighborhoods within a commute-time limit. | Similar Neighborhoods |
get_cross_city_alternatives Coming soon | Neighborhoods in a destination city most similar to an origin neighborhood. | Similar Neighborhoods |
Cross-city matching is on the roadmap. Until get_cross_city_alternatives ships, get_similar_neighborhoods and get_affordable_alternatives prioritize results in the origin's own metro area, or within 100 km where no metro is defined.
Points of interestβ
| Tool | What it does | Permissions required |
|---|---|---|
get_enhanced_pois | POIs near a coordinate or within a geography, sorted by relevance. | POIs |
get_neighborhood_pois | POIs of requested types near a neighborhood, with walkability context. | POIs Location Scores |
get_poi_categories | Full list of available POI category identifiers. | POIs |
get_poi_brands | Full list of available POI brand identifiers (2,000+). | POIs |
get_poi_tags | Full list of available POI tag identifiers. | POIs |
Demographics and schoolsβ
| Tool | What it does | Permissions required |
|---|---|---|
get_demographics | Demographic data for a neighborhood or geography. | Demographics |
get_schools | Nearby primary and high schools for a neighborhood. | Schools |
Housing and market data β US onlyβ
| Tool | What it does | Permissions required |
|---|---|---|
get_market_stats | Real estate market statistics for a US geography. | Market Stats |
get_market_stats_status | Availability and last-updated timestamp for market statistics data. | Market Stats |
get_typical_home_price Coming soon | Typical price of a specific kind of home in a US geography. | Market Stats |
get_housing_stock Coming soon | Count-based summary of housing inventory in a US geography. | Market Stats |
get_housing_pool_snapshot Coming soon | 3-year snapshot of the housing pool in a US geography. | Market Stats |
find_neighborhoods_by_budget Coming soon | Find and rank neighborhoods by home price for a property type and area. | Market Stats |
The four listing-level housing tools are exposed by the server but not yet backed by data in production β they return {"available": false} rather than an error. get_market_stats and get_market_stats_status are fully live.
Mobility and commuteβ
| Tool | What it does | Permissions required |
|---|---|---|
get_transit_options | Transit context for a location in a single call β mobility scores, the transport section of the neighborhood profile, and nearby transit POIs. | Location Scores Profiles POIs |
get_commute_time Coming soon | Travel time and distance between two coordinates. | included |
get_commute_time_named Coming soon | Travel time between two named places β no coordinates needed. | included |
Point-to-point routing is not yet available. get_transit_options describes how well-connected a location is, but does not compute travel time between two places.
Riskβ
| Tool | What it does | Permissions required |
|---|---|---|
get_climate_risk Coming soon | Climate risk data for a property location. | Climate Risk |
Promptsβ
Alongside its tools, the server ships four MCP prompts β reusable, multi-step templates your client can offer as slash commands or presets. Each one chains several tools into a finished piece of analysis.
| Prompt | Arguments | What it produces |
|---|---|---|
neighborhood_report | lat, lng | Full neighborhood report: scores, profile, demographics, and measures. |
compare_neighborhoods | two coordinates | Structured comparison of two locations. |
family_friendly_analysis | lat, lng | How family-friendly an area is: schools, daycares, parks, and demographics. |
investment_potential | geog_id | Real estate investment brief: value drivers, market stats, and comparables. |
Prompt support varies by client β in Claude Code they appear under /, while some clients do not surface prompts at all.
Example promptsβ
MCP works best when users phrase goals, not API calls. These examples exercise common tool combinations:
- "What are the quality-of-life scores for Ansley Park in Atlanta, and what does the neighborhood feel like?" β
search_geographiesβget_scoresβget_neighborhood_profile - "I love Montreal's Little Italy but it's out of budget. What else in the city is similar and cheaper?" β
search_geographiesβget_affordable_alternatives - "How's the housing market in this Denver ZIP code β is it moving fast, and at what prices?" β
search_geographiesβget_market_stats - "What drives property values in this neighborhood, and how does it compare to the one next door?" β
get_value_driversβget_neighborhood_comparison - "Which grocery stores and cafΓ©s are within walking distance of this listing?" β
get_enhanced_pois - "How well-connected is Park Slope for someone without a car?" β
get_transit_options
Usage and rate limitsβ
MCP tool usage is tied to the underlying calls to Local Logic APIs and counts toward the monthly API usage tier in your contract. Some of the MCP tools listed above can make 2β3 API calls to produce a complete response.
Customers are limited to 500 API queries per second, which will also apply to queries from MCP tools.
Security and data handlingβ
- Read-only scope. No tool exposed by this server can modify data. Even if an AI agent behaves unexpectedly, its impact is limited to reading data within your existing permissions.
- Your permissions apply. Tool responses are limited to the products and regions in your contract.
- Data residency. The Local Logic MCP Server is hosted in AWS
us-east-1. - Prompt injection awareness. When using this server alongside other MCP servers or web-browsing tools, we recommend enabling human confirmation of tool calls in your client. Content retrieved from other sources should not be able to silently trigger tool calls against your data.
- Query logging. We do not train models on your queries. We do log tool usage to improve our products, prioritize data updates in areas with more queries, and support billing.
Troubleshootingβ
Authentication fails (401).
Check the header value format. It must be MCP β the word MCP, then a space, then your MCP key. A common cause is sending your Local Logic API key (the V3 <key> used by the REST API and SDKs) instead β that scheme is not accepted here. Bearer <token> will also not work outside the OAuth flow described in OpenAI and Anthropic APIs. Confirm the header name is Authorization and that your MCP key has not been rotated.
The connector saves but no tools appear. Confirm MCP is enabled on your account β MCP access is granted per contract. Contact support@locallogic.co if you are unsure.
My client doesn't support remote MCP servers.
Use the mcp-remote bridge shown under Other clients in the Quickstart, or upgrade to a client version with native Streamable HTTP support.
A tool returns an authorization or "not entitled" error.
Your API contract may not include that product. Note that several tools combine multiple products in one call β get_transit_options, for example, needs Location Scores, Profiles, and POIs β so a missing entitlement on any one of them fails the whole call. The tool reference lists the full set each tool requires. Contact support@locallogic.co to discuss access.
A tool listed in these docs isn't in my client's tool list. Check whether it is marked Coming soon in the tool reference. Those tools are documented ahead of release and are not callable yet.
A tool returns "available": false.
The tool is exposed but its data is not yet enabled in production β this applies to the listing-level housing tools. It is not an error with your key or your entitlements.
The model isn't calling Local Logic tools at all. Verify the connector is enabled for the current conversation, then name it explicitly in your prompt (e.g., "Using Local Logic, β¦"). Most clients let you inspect available tools to confirm the connection is live.
FAQβ
What is MCP? The Model Context Protocol is an open standard that lets AI applications securely connect to external tools and data sources. Local Logic's MCP server exposes our location intelligence as tools that any MCP-compatible AI client can call.
Is this the same data as the REST API? Yes β the MCP server is a layer over the same underlying data products. Endpoints available via MCP are marked with the Available via MCP π badge on their documentation pages; those with MCP support still in development are marked Coming soon via MCP π.
Can the MCP server change anything in my account? No. Every tool is read-only.
Why does the MCP server use a different key than my Local Logic API key? Your Local Logic API key is designed to be used from a browser (via our SDKs), where it's visible to anyone inspecting network traffic on the page. That's an acceptable exposure for the SDK's own scoped use, but not a credential that should also unlock a general-purpose MCP server. Issuing a separate MCP key β one you configure only in trusted clients like Claude Code, Cursor, or your own backend, never in front-end code β keeps the two exposure surfaces independent. Request your MCP key from support@locallogic.co.
Can I use this with ChatGPT or other OpenAI models?
Through the OpenAI Responses API and Codex CLI, yes β both accept the Authorization header this server requires. The ChatGPT app itself, no: its custom connectors support only OAuth or no authentication, with no field for an API key or custom header. See the ChatGPT tab in the Quickstart.
Which regions are covered? The US and Canada, matching the underlying APIs.
How is MCP usage billed? MCP usage counts toward the same monthly API usage limit defined in your contract.
Where do I report issues or request new tools? support@locallogic.co