Run the open-source stack locally, install a playbook, load business data, and connect your AI assistant—or build integrations with the official SDKs.
AnythingGraph is a context layer for operational data. You model record types (entities) and how they relate, bring data in through the connector, and explore linked records in the dashboard. Optional AI metadata on each field helps VLMs and agents extract and map source data.
AnythingGraph is built on a simple idea: give your AI the right data—not all of it. Most teams already have the facts they need, but they live in spreadsheets, apps, and inboxes. The product turns that scattered information into a governed graph that reflects how your business actually works—accounts linked to contacts, orders, documents, and the rest.
The goal is clarity and control: operational truth you can explore, integrate, and share with AI on your terms.
Once the stack is running, most people follow steps like these:
./start-all.sh.Source code: AnythingGraph/AnythingGraph (platform) and AnythingGraph/sdk (client libraries).
You need Rust and Node.js on your machine.
Clone the main AnythingGraph repository only—you do not need a separate clone of the SDK repo to run the platform:
git clone https://github.com/AnythingGraph/AnythingGraph.git
cd AnythingGraph
Repository: github.com/AnythingGraph/AnythingGraph
From the repository root, run:
chmod +x start-all.sh # once
./start-all.sh
This starts the core services, dashboard API and UI, and remote MCP. Press Ctrl+C to stop everything. The script installs npm dependencies when needed and frees busy ports before binding.
| What | URL |
|---|---|
| Dashboard UI | http://127.0.0.1:5183 |
| Dashboard API | http://127.0.0.1:5180/api/health |
| Remote MCP | http://127.0.0.1:3333/mcp |
http://127.0.0.1:5183 in your browser—that is where you install playbooks and
manage data. Keep ./start-all.sh running while you work.
A playbook is a packaged scenario for your graph: predefined record types (entities), relationships between them, optional sample data, and ingest rules that tell the connector how to map incoming JSON into those types.
Each playbook has:
playbook_id (for example crm-relationship-graph).playbook_id when using MCP).Playbooks are the recommended starting point—you get a working graph in minutes instead of designing schema from scratch. See the playbook catalog for all packs in the OSS repo. You can still add your own record types and rows later without installing another pack.
http://127.0.0.1:5183/playbooks).
After a playbook is installed, send JSON to its webhook on the dashboard API. The dashboard builds ingest context for that playbook; the connector maps fields, creates rows, and links related records. Failures go to the landing zone.
Webhook pattern:
POST http://127.0.0.1:5180/api/playbooks/{playbookId}/webhook
Content-Type: application/json
Body shape — either a JSON array of objects or a wrapper:
{ "records": [ { ... }, { ... } ] }
Use field names described in the playbook instructions (in the dashboard). Optional query
?source=your-system labels the batch for connector training.
POST http://127.0.0.1:5180/api/playbooks/organizational-graph/webhook
{
"records": [
{
"full_name": "Jane Smith",
"job_title": "Engineer",
"email": "jane@acme.example",
"corporation_name": "Acme Corp"
}
]
}
Include account_name so the connector can link to an existing account row:
POST http://127.0.0.1:5180/api/playbooks/crm-relationship-graph/webhook
{
"records": [
{
"full_name": "Alex Rivera",
"email": "alex@northwind.example",
"account_name": "Northwind Traders"
}
]
}
You can also inject via the SDK:
client.dashboard.playbook_webhook("organizational-graph", {"records": [...]})
You do not need a playbook to use AnythingGraph. Without one, you define the graph yourself and write data through the dashboard, APIs, SDK, or MCP—there is no playbook webhook or playbook-scoped field mapping.
No connector involved; data goes straight to the graph store behind the dashboard.
With the stack running, the dashboard proxies to the data layer, for example:
POST /api/entities — create a record typePOST /api/entities/{id}/data — create a rowPOST /api/entity-relationships and POST /api/relationships — schema and row linksBase URL: http://127.0.0.1:5180. See dashboard/README.md in the repo for the full route list.
data_layer clients to create entities and rows directly (ports
8182 by default). Use connector.ingest only if you supply your own ingest context
(advanced; playbooks build that context for you).The landing zone is a review queue in the dashboard for records that could not finish playbook ingest. Good rows are written to the graph; failed rows are held aside so you can fix mappings instead of silently dropping bad data.
Open it from the sidebar (Landing zone) or from the home page banner when new failures
are waiting. URL: http://127.0.0.1:5183/landing-zone.
When you POST to a playbook webhook, the path is:
A single webhook call can therefore partially succeed: some rows land in the graph while others appear in the landing zone. Check the ingest response or the landing zone list after each batch.
| Step | Meaning (plain language) |
|---|---|
field_mapping |
Incoming JSON keys could not be matched to a playbook record type (wrong field names or unknown shape). |
entity_routing |
A record type was chosen but no usable field values were mapped (empty or invalid mapping). |
row_create |
Mapping looked fine but creating the row in the graph failed (validation, missing required fields, etc.). |
relationship_create |
The row was created but linking it to another record failed (for example account not found for a contact). |
In everyday terms, an ontology is a shared picture of what exists in your domain and how those things connect. It is not a single database table—it is the vocabulary and rules your organization agrees on: “we have Accounts and Contacts,” “a Contact belongs to an Account,” “an Invoice references a Vendor.”
Spreadsheets name columns differently; apps use their own IDs. An ontology sits above that noise and says what the business objects mean and how they relate, so people and software can talk about the same reality.
You express ontology in practical building blocks—no PhD required:
When you open Graph View in the dashboard, you are looking at that structure visually—the schema layer of your graph, not just a flat list of files or tables.
Ontology is what turns raw JSON into business context. It enables the product ideas from the overview:
playbook_id, you are
limiting it to one ontology slice (CRM, HR, finance)—the “right data, not all of it” promise in
structural form.
End-to-end guides for common integration patterns. Each use case builds on playbooks, the connector, and the same graph you explore in the dashboard.
MCP lets assistants such as Cursor or Claude work with the same graph you see in the dashboard—list record types, read rows, create links, and ask questions in natural language.
When you run ./start-all.sh, remote MCP is already available at
http://127.0.0.1:3333/mcp. You can also copy the JSON snippet from the dashboard under
Settings → Remote MCP setting on an installed playbook.
./start-all.sh running..cursor/mcp.json in your project).{
"mcpServers": {
"anythinggraph": {
"url": "http://127.0.0.1:3333/mcp"
}
}
}
Reload MCP in Cursor and confirm the server shows as connected.
These are conversation starters—your assistant uses MCP tools behind the scenes; you do not call APIs yourself.
crm-relationship-graph.” — scopes reads to that pack when the playbook uses access rules.
playbook_id from the playbook detail page (for example
organizational-graph) when asking the agent to read or write playbook-scoped data.
./start-all.sh is still running and port 3333 is free.http://127.0.0.1:5180/api/health and open the dashboard once to verify the API.mcp.json.Official HTTP clients for Python, Node.js, and Go live in AnythingGraph/sdk. Use them from scripts, backends, or ETL jobs—the same services the dashboard and connector use.
| Service | Default URL | Typical use |
|---|---|---|
| data-layer | http://127.0.0.1:8182 |
Entities, rows, relationships |
| connector | http://127.0.0.1:8183 |
Direct ingest pipelines |
| dashboard API | http://127.0.0.1:5180 |
Playbooks list, playbook webhook helper |
Install from the AnythingGraph/sdk repository when you build apps—no separate platform clone required.
git clone https://github.com/AnythingGraph/sdk.git
cd sdk/python && pip install -e .
from anythinggraph import AnythingGraphClient
client = AnythingGraphClient()
print(client.data_layer.health())
client.dashboard.playbook_webhook(
"organizational-graph",
{"records": [{"full_name": "Sam Lee", "email": "sam@acme.example", "corporation_name": "Acme Corp"}]},
)
git clone https://github.com/AnythingGraph/sdk.git
cd sdk/nodejs && npm install
import { AnythingGraphClient } from 'anythinggraph-sdk';
const client = new AnythingGraphClient();
await client.dataLayer.health();
const playbooks = await client.dashboard.listPlaybooks();
git clone https://github.com/AnythingGraph/sdk.git
cd sdk/golang && go build ./...
client := anythinggraph.NewClient(nil)
health, err := client.DataLayer.Health(context.Background())
Environment variables (DATA_LAYER_URL, CONNECTOR_URL,
DASHBOARD_API_URL, etc.) override defaults when services run on other hosts.
See the
SDK README
for ReBAC headers and ingest options.