Elephant MCP Server
Provides an alternative embedding provider via AWS Bedrock for semantic code search when OpenAI is not configured.
Enables arbitrary SQL queries on property data through the queryProperties tool using embedded DuckDB.
Serves as the data storage layer, with property data published on IPFS and accessed via IPNS for geo tools and query-table.
Provides text embeddings for semantic code search in the getVerifiedScriptExamples tool.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Elephant MCP ServerList classes for the 'County' data group. use elephant mcp"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Elephant MCP Server
Elephant MCP connects Claude-compatible clients to the Elephant data graph, exposing discoverable tools for listing data groups, classes, and individual property schemas. The server is published on npm as @elephant-xyz/mcp.
Embedding Provider: The
getVerifiedScriptExamplesand place co-location tools use text embeddings. Provider selection follows this priority:
OpenAI when
OPENAI_API_KEYis set - Usestext-embedding-3-smallwith 1024 dimensionsVercel AI Gateway when
AI_GATEWAY_API_KEYorVERCEL_OIDC_TOKENis available - Usesopenai/text-embedding-3-smallwith 1024 dimensionsAWS Bedrock otherwise - Uses
amazon.titan-embed-text-v2via the AWS credential chainVercel deployments can use their automatically supplied OIDC identity without storing an OpenAI or AWS secret. Local and AWS runtimes continue to fall back to Bedrock when neither OpenAI nor Gateway authentication is configured.
π Prompt Recommendations
For best results with Elephant MCP, always specify the Data Group you're working on in your prompts and add use elephant mcp at the end.
Example prompts:
"I'm working on the 'County' data group. Can you help me explore the available classes? use elephant mcp"
"What properties are available in the 'property' class? I'm working with the 'County' data group. use elephant mcp"This helps the AI understand which data context to use and ensures it leverages the Elephant MCP tools effectively.
Heads up: the one-click badges above install the npm build (
@elephant-xyz/mcp@latest), which is temporarily behind and does not include the query-table tools (queryProperties), and one-click cannot set the requiredPROPERTY_QUERY_TABLE_MAP. Until the next npm release, use the manual configuration below (GitHub build).
Related MCP server: Baby-SkyNet
Why Elephant?
Ready-to-use
npxlauncher compatible with Claude, Cursor, VS Code, Gemini CLI, and other MCP clients.Tools to enumerate Elephant data groups, related classes, and full JSON Schema fragments.
Structured MCP logging to stream diagnostics into every connected client.
Available Tools
listClassesByDataGroupβ Lists classes attached to an Elephant data group, including friendly names and descriptions.listPropertiesByClassNameβ Returns schema property keys for a class (excluding transport-only fields).getPropertySchemaβ Fetches the full JSON Schema for a specific property and class combination.getVerifiedScriptExamplesβ Returns a list of working examples of the code, that maps data to the Elephant schema.findPropertiesInAreaβ Returns properties whose centroid falls inside a user-supplied bounding box or polygon, sourced from the derived geo index.sumPropertyValueInAreaβ Sums the current AVM value of properties whose centroid falls inside a bounding box or polygon.queryPropertiesβ Runs a read-only SQLSELECT/WITHover a county's query-table (viewproperties) via embedded DuckDB, for arbitrary counts, filters, and aggregates over owner, address, zip, value, acreage, material, and more.getPropertyQuerySchemaβ Returns the query-table's columns and types for a county so callers know what they can query.queryPlacesβ Runs a structured, read-only query over a county's catalog-authorized Overture places parquet. Supports category/hierarchy/name/location/status/hosted-service/confidence filters, count mode, deterministic pages, and groupedtaxonomy_primaryaggregates; callers cannot submit SQL or URLs.analyzePlaceColocationβ Returns diagnostic bounded occupied-cell evidence for one exact Overture category pair, including conditioned spatial evidence, raw embedding distance, and immutable places-table provenance when the catalog IPNS path resolves. It explicitly returns no calibrated semantic percentile and remains non-publishable; discovery is the publishable Class H source unless separate auditable percentile evidence exists.discoverPlaceColocationCandidatesβ Accepts{ county }only, embeds every eligible category, and calibrates raw semantic distance against all eligible unordered category pairs before applying thedistance >= 0.35 AND inclusive percentile >= 0.80guard. It returns bounded top-32/top-5 evidence plus corpus, full-distribution, spatial-ledger, and immutable table-identity digests. Discovery fails closed for publication if immutable table provenance is unavailable or inconsistent. The percentile is relative semantic distanceβnot statistical improbability or a publish decision.getPlaceQuerySchemaβ Returns the real places columns, exactqueryPlacescontract, safety limits, release/attribution/licence-gate provenance, and honest null completeness for a county.getOraclePropertyβ Fetches the full consolidated record for one property (by parcel id, property id, or CID).listOraclePropertiesβ Paginated per-county property listing.listPublishedCountiesβ Enumerates Oracle's canonical catalog of published counties, stable county FIPS identities, public data URLs (including nullableplacesTableUrl), update timestamps, and catalog revision. Use this for county and places-availability discovery instead of a hard-coded list.getOracleDatasetInfoβ Per-county dataset summary (property count, export time, source) plus per-source coveragedatasets[](count, %, date range) whenDATASET_COVERAGE_MAPis configured.getPropertyPermitsβ On-demand permit harvest for a parcel.
Overture places queries
Call getPlaceQuerySchema before the first query for a county, then call
queryPlaces with mode: "rows", "count", or
"groupByPrimaryCategory". The exact schema tool name is singular
getPlaceQuerySchema; the query tool is plural queryPlaces.
taxonomyPrimary supports exact or contains matching and is the correct field
for category counts. taxonomyHierarchyMember performs exact,
case-insensitive membership over the /-delimited hierarchy for roll-ups such
as restaurant. hostedService accepts include (MCP default), exclude, or
only; agents doing business/co-location counts should normally pass
exclude and disclose that choice. Rows include release, address, category,
status, confidence, coordinates, and hosted-service evidence. Public business
websites, phones, and emails remain outside the default row projection.
Every request resolves placesTableUrl from the canonical published-county
catalog. Callers cannot supply a parquet URL or SQL. Trusted HTTPS gateway
validation, bound values, a 60-second query timeout, a bounded connection
cache, deterministic sorting, and the shared 1,000-row cap protect the query
surface. Counties whose placesTableUrl is null return a clear unavailable
response. Overture has no authoritative total-business denominator, so
completionPercent remains null; the schema/query provenance points to the
published sibling index and notice carrying release and licence-gate evidence.
The co-location analyzer and discovery additionally issue a bounded HEAD for
the catalog's /ipns/<name>/<relative-path> table URL on trusted IPFS
gateways. Per the IPFS Path Gateway specification, X-Ipfs-Roots is ordered
from the resolved IPNS root through each logical path segment. The first CID is
therefore the immutable root used to construct
/ipfs/<rootCid>/<relative-path>; the last CID is recorded as the parquet leaf
only when X-Ipfs-Path matches and the header contains one root for every
segment. Analysis queries use the immutable URL when resolution succeeds.
When a complete header also exposes the parquet leaf CID, execution uses its
direct /ipfs/<contentCid> URL to avoid repeated directory traversal while the
root-based path remains the path-aware rerun locator.
Mutable IPNS alone never claims exact rerunnability. Analyzer evidence remains
diagnostic when resolution fails; discovery returns bounded evidence with
failure.failedClosed: true and cannot be used for publication.
Geo tools and data sources
These geo tools read two independent IPFS-published datasets, each resolved at
the doc level by its own IPNS name (no central hosted endpoint β every consumer
runs the server locally via npx, see below):
Lee property data β stable IPNS
oracle-open-data-lee.Derived geo/value index β separate dataset configured via
ORACLE_GEO_INDEX_IPNS(e.g.oracle-geo-index-lee), or a fixedORACLE_GEO_INDEX_CID. This index is independent from the property open-data vars and is whatfindPropertiesInArea/sumPropertyValueInAreaquery.
Supported MCP Clients
Cursor
Ensure Node.js 22.18+ is installed.
Cursor will open a configuration screen pre-filled with:
{ "command": "npx", "args": ["-y", "@elephant-xyz/mcp@latest"], "env": { // Option 1: Use OpenAI embeddings "OPENAI_API_KEY": "sk-your-openai-key", // Option 2: Use Vercel AI Gateway // "AI_GATEWAY_API_KEY": "your-gateway-key", // Option 3: Use AWS Bedrock (omit OpenAI/Gateway variables) // "AWS_REGION": "us-east-1" // optional, defaults to us-east-1 // Recommended: the per-county query-table (powers queryProperties AND all // property/geo/dataset tools). A served county needs ONLY this line: "PROPERTY_QUERY_TABLE_MAP": "{\"lee\":\"https://ipfs.filebase.io/ipns/k51qzi5uqu5djd4ohcf3qm87dhlt0e270xw8ejhkyia62edr76uj0u05hrf7m5\"}", // Optional override/addition: per-county hourly coverage snapshots. // Lee, Miami-Dade, Orange, and Palm Beach coverage URLs are built in. "DATASET_COVERAGE_MAP": "{\"lee\":\"https://ipfs.filebase.io/ipns/<coverage-ipns-name>\"}", // Optional override for Oracle's canonical published-county catalog: // "PUBLISHED_COUNTY_CATALOG_URL": "https://example.com/published-counties.json", // Optional legacy fallback (only for counties NOT in the query-table map): // "ORACLE_GEO_INDEX_IPNS": "k51qzi5uqu5djo3756w73x3swtt63g9y7igj7tvv1gs4skjk3haj3fuk7qosdi", }, }For OpenAI or AI Gateway, replace the corresponding placeholder with your actual key. Vercel production may instead use its automatically supplied OIDC identity. For AWS Bedrock, remove the OpenAI/Gateway variables and ensure your environment has valid AWS credentials (IAM role, environment variables, or AWS credentials file).
PROPERTY_QUERY_TABLE_MAP maps each county to its published query-table Parquet on IPFS. It powers queryProperties (arbitrary SQL) and is the primary source for getOracleProperty, listOracleProperties, getOracleDatasetInfo, and the geo tools β so a county listed there needs no ORACLE_* vars. getOracleDatasetInfo has built-in public coverage snapshots for Lee, Miami-Dade, Orange, and Palm Beach. DATASET_COVERAGE_MAP can override those URLs or add more counties by mapping each county to its small hourly dataset-coverage.json snapshot on Filebase/IPNS. Donphan uses this coverage to qualify answers, while Miranda's website can read the same public JSON URL directly. Do not configure this to an AWS S3 URL for public users. The ORACLE_OPEN_DATA_* / ORACLE_GEO_INDEX_* vars are optional fallback for counties not yet in the map.
Rock Island additive configuration
Rock Island uses the existing county maps; it does not add or change shared
routing. Merge the following rock-island entry into each deployment's
existing JSON object. Preserve every existing county entry and default county:
PROPERTY_QUERY_TABLE_MAP
{"rock-island":"https://ipfs.filebase.io/ipns/k51qzi5uqu5djbtswq6lb4p7xbf3nu8bzdzokdtcdld1r2vx6asn7lgfuk54wt"}
PERMIT_QUERY_TABLE_MAP
{"rock-island":"https://ipfs.filebase.io/ipns/k51qzi5uqu5di42nblo5nuk94aj7af393d9y5vhqxp5dtxikzso0wt14v3p0wa"}
DATASET_COVERAGE_MAP
{"rock-island":"https://elephant-mcp-two.vercel.app/coverage/rock-island.json"}These snippets show the Rock Island entries only, not replacement values for
the full maps. This configuration supports the existing property SQL, property
lookup/listing, permit SQL/schema, and dataset-info paths. Generic corporate SQL
and Rock Island getPermitCoverage are deferred and unsupported by this
publication.
Note: the query-table tools (
queryProperties,getPropertyQuerySchema) are onmain. Until the next npm release, install the current build from GitHub β replace the args with["-y", "github:elephant-xyz/elephant-mcp"](first launch builds from source; give it a minute).
Save and toggle the Elephant connection inside Cursor's MCP panel.
If you are hacking on a local checkout, switch the command to
npm startand setcwdto your repository path.
Visual Studio Code
Install the Model Context Protocol extension.
Accept the pre-populated install flow above or add manually under Settings β MCP β Servers with:
OpenAI:
OPENAI_API_KEY=sk-your-openai-key npx -y @elephant-xyz/mcp@latestAWS Bedrock:
npx -y @elephant-xyz/mcp@latest(uses IAM credentials from environment)
Reload VS Code and enable the Elephant server in the MCP panel.
Claude Code
macOS/Linux with OpenAI:
claude mcp add elephant --env OPENAI_API_KEY=sk-your-openai-key -- npx -y @elephant-xyz/mcp@latestmacOS/Linux with AWS Bedrock (uses IAM credentials):
claude mcp add elephant -- npx -y @elephant-xyz/mcp@latestRestart Claude Code after adding the server so the tools appear in the @tools palette.
OpenAI Codex
CLI setup
With OpenAI:
codex mcp add elephant --env OPENAI_API_KEY=sk-your-openai-key -- npx -y @elephant-xyz/mcp@latestWith AWS Bedrock:
codex mcp add elephant -- npx -y @elephant-xyz/mcp@latestYou can explore additional options with
codex mcp --help. Inside the Codex TUI, run/mcpto view currently connected servers.config.toml setup Edit
~/.codex/config.toml(or open MCP settings β Open config.toml from the IDE extension) and add:For OpenAI:
[mcp.elephant] command = "npx" args = ["-y", "@elephant-xyz/mcp@latest"] env = { OPENAI_API_KEY = "sk-your-openai-key" }For AWS Bedrock:
[mcp.elephant] command = "npx" args = ["-y", "@elephant-xyz/mcp@latest"] # Uses IAM credentials from environment; optionally set AWS_REGIONSave the file and restart Codex to load the new server.
Gemini CLI
Create (or edit) .gemini/settings.json in your project and add:
With OpenAI:
{
"mcpServers": {
"elephant": {
"command": "npx",
"args": ["-y", "@elephant-xyz/mcp@latest"],
"env": {
"OPENAI_API_KEY": "sk-your-openai-key",
},
},
},
}With AWS Bedrock:
{
"mcpServers": {
"elephant": {
"command": "npx",
"args": ["-y", "@elephant-xyz/mcp@latest"],
// Uses IAM credentials from environment
},
},
}Restart Gemini CLI or run gemini tools sync to pick up the new server.
Configuration
The stdio transport means no port or server identity flags are required. Environment variables handled by src/config.ts:
Variable | Description | Default |
| OpenAI API key for embeddings. When set, OpenAI is used; otherwise falls back to AWS Bedrock. | (optional) |
| AWS region for Bedrock API calls. |
|
| Pino log level ( |
|
| Optional bearer token protecting the | (optional) |
| Recommended. JSON object mapping county β query-table Parquet location (an IPNS gateway URL or a local path), e.g. | (optional) |
| Single-county query-table location (fallback when the map is unset). | (optional) |
| County the single | (optional) |
| JSON object mapping county β permit query-table Parquet location. Merge new county entries into the existing object so configured counties keep their current routes. | (optional) |
| Optional JSON object mapping county β published | (optional) |
| Single-county coverage snapshot location (fallback when the map is unset). | (optional) |
| County the single | (optional) |
| Canonical Oracle-published county catalog used by | Oracle repository catalog |
| JSON object mapping county β IPNS for multi-county deployments, e.g. | (optional) |
| County used when a request omits | (optional) |
| Legacy single-county IPNS of the open-data manifest/index. Used when | (optional) |
| Fixed CID fallback for the default county when IPNS resolution yields nothing. | (optional) |
| IPNS name of the derived geo/value index (e.g. | (optional) |
| JSON object mapping county β IPNS for the geo/value index (same shape as | (optional) |
| Default county for the geo/value index when no county is requested. | (optional) |
| Fixed CID of the derived geo/value index; used when | (optional) |
AWS Bedrock Authentication
When using AWS Bedrock (no OPENAI_API_KEY set), the server authenticates using the standard AWS credential chain:
Environment variables (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY)Shared credentials file (
~/.aws/credentials)ECS/Lambda container credentials (
AWS_CONTAINER_CREDENTIALS_*)IAM instance role (when running on EC2/ECS/Lambda)
Ensure your IAM role or user has the bedrock:InvokeModel permission and access to the amazon.titan-embed-text-v2:0 embedding model in the configured AWS_REGION. In some regions, you must explicitly request access to this model in the AWS Bedrock Console before it can be invoked.
Important: At least one embedding provider must be configured. If neither OPENAI_API_KEY nor AWS credentials are available, the getVerifiedScriptExamples tool will return an error prompting you to configure credentials.
Credential Verification
At startup, the server verifies embedding provider credentials:
For OpenAI: Checks that
OPENAI_API_KEYis setFor AWS Bedrock: Resolves credentials through the full AWS credential provider chain and logs the detected source
The verification result is logged and included in the MCP startup message for debugging.
Database Compatibility
The embedding database is automatically rebuilt when switching between embedding models with different vector dimensions (e.g., switching from a 1536-dimension model to a 1024-dimension model). This ensures the getVerifiedScriptExamples tool works correctly after model changes. The server will re-index all verified scripts after a rebuild.
Zod compatibility note: this server and its dependencies require zod v3. Installs will fail if a v4 copy is hoisted into node_modules; the postinstall script enforces the v3 constraint to avoid runtime errors such as keyValidator._parse is not a function.
Need to Contribute?
Development setup, testing, and release workflows live in CONTRIBUTING.md.
Support
Open an issue with your Node.js version, client details, and any relevant log output if you run into trouble. We're happy to help you get connected.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
AlicenseBqualityDmaintenanceConnects Claude and other MCP clients to Elasticsearch data, allowing users to interact with their Elasticsearch indices through natural language conversations.31,599705Apache 2.0- FlicenseNot gradedqualityDmaintenanceProvides Claude AI with persistent, searchable memory management across sessions using SQL database, semantic analysis with multi-provider LLM support (Anthropic/Ollama), vector search via ChromaDB, and graph-based knowledge relationships through Neo4j integration.1
- AlicenseAqualityCmaintenanceSelf-hosted personal knowledge graph for Claude that persists across sessions, devices, and tools. Built on Neo4j with local semantic embeddings; OAuth 2.1 lets Claude Code, Claude Desktop, and claude.ai web all hit the same graph.23412MIT
- FlicenseNot gradedqualityCmaintenanceProvides Claude Desktop with persistent, structured memory and semantic search via a local SQLite knowledge graph, plus a web UI for visualization and management.
Related MCP Connectors
Connect your team's living knowledge base β docs, data, issues, CRM β to Claude and ChatGPT.
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Talk to your live-events CRM (campaigns, analytics, paid ads, segments) in Claude and ChatGPT.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/elephant-xyz/elephant-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server