Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
neo4j-contrib avatar

Neo4j Aura Agent Skill

  • 317 installs
  • 101 repo stars
  • Updated August 3, 2026
  • neo4j-contrib/neo4j-skills

neo4j-aura-agent-skill is an agent skill that creates, configures, and invokes Neo4j Aura GraphRAG agents over AuraDB using schema-driven tool selection and the v2beta1 REST API.

About

neo4j-aura-agent-skill packages a solo-builder workflow for Neo4j Aura Agents—GraphRAG assistants backed by AuraDB. It targets indie developers who already have graph data in Aura and want repeatable agent setup instead of one-off console clicking. The skill walks schema discovery (including vector index detection), maps real graph shape to the three first-class tools, and drives agent lifecycle through authenticated REST calls with prompts and exposure modes. Install when you are wiring RAG or analytics chat into a product and need agents that respect your ontology rather than generic retrieval. Prerequisites are explicit: enabled Generative AI and Aura Agent in the org, project admin rights, client credentials, and org/project IDs from the console. Use uv-synced Python helpers to list agents, create from config, and smoke-test NL queries before you expose MCP or public REST endpoints to end users.

  • Fetches AuraDB graph schema and annotates property types for tool design
  • Guides tool choice across CypherTemplate, SimilaritySearch, and Text2Cypher from schema and use case
  • Creates, lists, and manages Aura Agents through the v2beta1 REST API
  • Sets system prompts and visibility (private/public, REST/MCP)
  • Invokes agents with natural language and parses structured responses

Neo4j Aura Agent Skill by the numbers

  • 317 all-time installs (skills.sh)
  • +27 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #2,239 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/neo4j-contrib/neo4j-skills --skill neo4j-aura-agent-skill

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs317
repo stars101
Security audit3 / 3 scanners passed
Last updatedAugust 3, 2026
Repositoryneo4j-contrib/neo4j-skills

What it does

Stand up and operate Neo4j Aura Agents with GraphRAG tools over an AuraDB knowledge graph via REST scripts.

Who is it for?

Best when you're shipping graph-backed AI features and already run AuraDB and hold Aura API credentials.

Skip if: Skip if you're without AuraDB data loaded, without Aura Agent enabled in org settings, or and only need local Neo4j Desktop without cloud agents.

When should I use this skill?

You need to create or manage Neo4j Aura Agents on an existing AuraDB knowledge graph with REST or MCP exposure.

What you get

You get scripted schema fetch, tool-matched agent configs, and working natural-language invocations ready to hook into your app or MCP surface.

  • Annotated graph schema output for tool design
  • Configured Aura Agent with system prompt and visibility settings
  • Validated natural-language query responses from agent invocation

By the numbers

  • Three guided Aura Agent tool types: CypherTemplate, SimilaritySearch, Text2Cypher
  • Python 3.13+ project with uv sync and documented manage_agent.py / fetch_schema.py scripts

Files

SKILL.mdMarkdownGitHub ↗

When to Use

  • Creating or configuring an Aura Agent on an existing AuraDB instance
  • Adding/updating tools (CypherTemplate, SimilaritySearch, Text2Cypher) to an agent
  • Deploying an agent for external access (REST API endpoint or MCP server)
  • Invoking an agent with natural language queries via REST API
  • Listing, reading, or deleting existing agents in a project

When NOT to Use

  • Creating/managing AuraDB instancesneo4j-aura-provisioning-skill
  • Creating vector indexesneo4j-vector-index-skill
  • Running Cypher directlyneo4j-cypher-skill
  • Building Aura Graph Analytics sessionsneo4j-aura-graph-analytics-skill

---

What are Aura Agents

GraphRAG agents on top of AuraDB — answer natural language questions via three tool types:

  • CypherTemplate — parameterized queries for predictable lookups
  • SimilaritySearch — vector similarity search over a VECTOR index
  • Text2Cypher — natural language → Cypher for aggregations and discovery

Expose your graph via natural language to users or apps without application code. Accessible as REST or MCP endpoint; single- and multi-turn. For full Cypher control, low-latency lookups, or direct writes — use neo4j-cypher-skill instead.

---

Prerequisites

  • Running AuraDB instance with knowledge graph loaded
  • "Generative AI assistance" enabled in Organization settings
  • "Aura Agent" toggled on in the project
  • "Tool authentication" enabled at project/Security level
  • Project admin access
  • AURA_CLIENT_ID and AURA_CLIENT_SECRET from console.neo4j.io → Account Settings → API Credentials
  • AURA_ORG_ID, AURA_PROJECT_ID — see Step 2; AURA_INSTANCE_ID — resolved interactively in Step 2 if not already set
  • Python env: uv sync in skill directory (or pip install neo4j neo4j-graphrag requests python-dotenv)
  • .env and schema.json in .gitignore

---

Step 1 — Verify Auth

Manual credential verification only — scripts call get_token() internally.

TOKEN=$(curl -s --request POST 'https://api.neo4j.io/oauth/token' \
  --user "${AURA_CLIENT_ID}:${AURA_CLIENT_SECRET}" \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=client_credentials' \
  | jq -r '.access_token')
echo "Token: ${TOKEN:0:20}..."

If blank token: verify AURA_CLIENT_ID/AURA_CLIENT_SECRET in .env. Stop and report. Token TTL: 3600 s. Re-run on 401/403.

---

Step 2 — Resolve Organization & Project IDs

From console URL (fastest): open console.neo4j.io → navigate to a project. URL pattern: /organizations/{AURA_ORG_ID}/projects/{AURA_PROJECT_ID}

Programmatic fallback:

curl -s https://api.neo4j.io/v1/tenants \
  -H "Authorization: Bearer $TOKEN" | jq '.data[] | {id, name}'
# tenant id maps to AURA_PROJECT_ID

Set in .env:

AURA_ORG_ID=<organization-id>
AURA_PROJECT_ID=<project-id>

Check `AURA_INSTANCE_ID` — if it is already set in .env, skip the rest of this step.

If not set, list available instances and ask the user to choose:

curl -s "https://api.neo4j.io/v1/instances?tenantId=${AURA_PROJECT_ID}" \
  -H "Authorization: Bearer $TOKEN" \
  | jq '.data[] | {id, name, status, region, type}'

Show output to user. Ask: "Which instance should the agent connect to?" Then write to .env:

AURA_INSTANCE_ID=<chosen-instance-id>
NEO4J_URI=neo4j+s://<chosen-instance-id>.databases.neo4j.io

If the list is empty: no AuraDB instances exist in this project — an Aura Agent cannot be created without one. Stop and report. If 401: re-run Step 1. If 404: verify AURA_PROJECT_ID. Stop and report.

---

Step 3 — List Existing Agents

uv run python3 scripts/manage_agent.py list   # Linux/macOS
uv run python scripts\manage_agent.py list    # Windows

Output: agent IDs, names, enabled status, endpoint URLs.

If 401: re-run Step 1. If 404: verify AURA_ORG_ID/AURA_PROJECT_ID. Stop and report.

---

Step 4 — Fetch Graph Schema

Requires NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD in .env.

uv run python3 scripts/fetch_schema.py   # Linux/macOS
uv run python scripts\fetch_schema.py    # Windows

Saves schema.json. Output: node/rel-type counts, node labels + typed properties (with Aura data_type), relationship patterns, VECTOR indexes.

Data gate — script exits with error and does NOT write schema.json if:

  • fewer than 2 nodes, OR
  • zero relationship types

If gate fails: load data into the database before proceeding. Stop and report. If ServiceUnavailable: check NEO4J_URI uses neo4j+s://; instance must be running. Stop and report. If neo4j-graphrag not found: uv add neo4j-graphrag. Stop and report.

Read schema.json before Step 5.

---

Step 5 — Discover Use Cases

Before designing tools, read references/authoring-guide.md.

Ask the user these questions. Do NOT guess tool types or parameters.

1. "What questions should this agent answer?" 2. "Which nodes or relationships matter most?" — match against schema.json → node_props 3. "Do users search by a specific property value?" → CypherTemplate 4. "Any counting, grouping, or date-range questions?" → Text2Cypher 5. "Search for semantically similar text?" → check schema.json → metadata → vector_index

  • No VECTOR index found: inform user; skip SimilaritySearch; delegate to neo4j-vector-index-skill first
  • VECTOR index found: ask the user — "Which embedding provider and model should be used? What output dimension?" See supported models in references/REFERENCE.md → Embedding Provider Options. Do NOT guess or default.

Tool selection:

Use CaseTool
Lookup by specific property valuecypherTemplate
Semantic text searchsimilaritySearch
Aggregation, counting, open-endedtext2cypher

CypherTemplate parameters: for each parameter, read aura_data_type from schema.json → node_props or rel_props and use it as data_type. If the property has low_cardinality: true, the parameter description MUST list the valid values — copy them from the values array in schema.json. Example: "description": "Agreement type to filter by. Valid values: \"Distributor Agreement\", \"License Agreement\", \"NDA\"". Properties with has_fulltext_index: true are especially likely to be filter targets and must include valid values when low cardinality.

SimilaritySearch configuration — ask the user for all three before drafting the tool config:

FieldWhat to askSource
provider"openai" or "vertexai"?User confirms
modelWhich model?User picks from references/REFERENCE.md → Embedding Provider Options
dimensionWhat output dimension?Required if model is configurable (see table); fixed models use the table value

index: use name from schema.json → metadata → vector_index where state = ONLINE. dimension must match vector.dimensions in the same index entry.

Signals inventory: for each label or relationship that appears in a tool or the user's stated questions, write a signal block in the system prompt. See references/authoring-guide.md → Signals inventory for the template and rules.

Draft config JSON → show to user for review → confirm → proceed to Step 6.

---

Step 6 — Create Agent

Minimum required config:

{
  "name": "My Agent",
  "description": "Answers questions about the graph",
  "dbid": "<AURA_INSTANCE_ID>",
  "is_private": false,
  "tools": [
    {
      "type": "text2cypher",
      "name": "Query Graph",
      "description": "Translates natural language questions into Cypher queries"
    }
  ]
}

Show config to user and confirm before running:

uv run python3 scripts/manage_agent.py create --config agent-config.json

Response includes id (save as AURA_AGENT_ID), endpoint_link, mcp_endpoint_link.

---

Step 7 — Invoke Agent (Test)

uv run python3 scripts/invoke_agent.py --agent-id "$AURA_AGENT_ID" "What can you help me with?"

--raw prints full JSON including reasoning chain and token usage.

Direct curl (uses token from Step 1):

curl -s -X POST \
  "https://api.neo4j.io/v2beta1/organizations/${AURA_ORG_ID}/projects/${AURA_PROJECT_ID}/agents/${AURA_AGENT_ID}/invoke" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"input": "What can you help me with?"}'

---

Step 8 — Update Agent (Partial PATCH)

Create patch JSON with only the fields to change:

{ "system_prompt": "Updated instructions.", "is_mcp_enabled": true }

Show to user and confirm before running:

uv run python3 scripts/manage_agent.py update --agent-id "$AURA_AGENT_ID" --config patch.json

---

Step 9 — Delete Agent

IRREVERSIBLE. Configuration permanently removed.

Show to user and wait for explicit confirmation before running:

uv run python3 scripts/manage_agent.py delete --agent-id "$AURA_AGENT_ID"

Returns 202 Accepted.

---

Tool Configuration

CypherTemplate

Pre-defined parameterized queries for repeated, predictable lookups.

{
  "type": "cypherTemplate",
  "name": "<descriptive name>",
  "description": "<what it looks up and when to use it>",
  "enabled": true,
  "config": {
    "template": "MATCH (n:Label {prop: $param}) RETURN n",
    "parameters": [
      {
        "name": "param",
        "data_type": "<string|integer|number|boolean — from schema.json aura_data_type>",
        "description": "<what the parameter represents. If low_cardinality=true in schema.json, append: Valid values: \"val1\", \"val2\", ...>"
      }
    ]
  }
}

Low-cardinality rule: if schema.json → node_props[Label][prop].low_cardinality is true, the description field must end with the exact values from schema.json → node_props[Label][prop].values. This applies to relationship properties in rel_props too.

SimilaritySearch

Requires a VECTOR index (state = ONLINE). Get index name from schema.json → metadata → vector_index.

{
  "type": "similaritySearch",
  "name": "<descriptive name>",
  "description": "<what text it searches and when to use it>",
  "enabled": true,
  "config": {
    "provider": "openai",
    "model": "text-embedding-3-small",
    "index": "<name from schema.json metadata.vector_index[state=ONLINE].name>",
    "top_k": 5,
    "dimension": "<vector.dimensions from schema.json metadata.vector_index options.indexConfig>",
    "post_processing_cypher": "<optional: Cypher to enrich similarity results with related nodes>"
  }
}

provider/model combinations: see references/REFERENCE.md.

Text2Cypher

Natural language → Cypher. Use as fallback for aggregation and discovery.

{
  "type": "text2cypher",
  "name": "<descriptive name>",
  "description": "<what questions it handles — and explicitly what it should NOT handle>",
  "enabled": true
}

---

Common Errors

ErrorCauseFix
401 UnauthorizedToken expiredRe-run Step 1
403 Forbidden on createNot a project adminRequest admin access
400 Bad RequestInvalid tool config or missing required fieldCheck type spelling: cypherTemplate, similaritySearch, text2cypher
404 Not FoundWrong org/project/agent IDRe-run list to verify IDs
400 on create with SimilaritySearchVector index missingCreate index first — use neo4j-vector-index-skill
Agent returns no resultstop_k too low or index emptyIncrease top_k; verify index is populated

---

Scripts

All scripts load credentials from .env automatically. Run with uv run python3 <script>.

ScriptPurpose
scripts/fetch_schema.pyFetch graph schema from AuraDB; save to schema.json
scripts/manage_agent.pyCRUD: list, create, get, update, delete agents
scripts/invoke_agent.pySend a natural language query to an agent

fetch_schema.py parameters:

ParameterTypeRequiredDefault
NEO4J_URIenvYes
NEO4J_USERNAMEenvNoneo4j
NEO4J_PASSWORDenvYes
NEO4J_DATABASEenvNoneo4j

manage_agent.py parameters:

ParameterTypeRequiredEnv fallback
AURA_CLIENT_IDenvYes
AURA_CLIENT_SECRETenvYes
--org-idargNoAURA_ORG_ID
--project-idargNoAURA_PROJECT_ID
--agent-idargget/update/deleteAURA_AGENT_ID
--configargcreate/update

invoke_agent.py parameters:

ParameterTypeRequiredEnv fallback
AURA_CLIENT_IDenvYes
AURA_CLIENT_SECRETenvYes
--org-idargNoAURA_ORG_ID
--project-idargNoAURA_PROJECT_ID
--agent-idargYesAURA_AGENT_ID
querypositionalYes
--rawflagNo

---

Checklist

  • [ ] AuraDB instance running, knowledge graph loaded
  • [ ] "Generative AI assistance" + "Aura Agent" enabled in org/project settings
  • [ ] .env populated: AURA_CLIENT_ID, AURA_CLIENT_SECRET, AURA_ORG_ID, AURA_PROJECT_ID, AURA_INSTANCE_ID, NEO4J_URI, NEO4J_PASSWORD
  • [ ] .env and schema.json in .gitignore
  • [ ] Auth verified (Step 1)
  • [ ] Org/Project IDs confirmed (Step 2)
  • [ ] API connectivity confirmed via list (Step 3)
  • [ ] schema.json fetched and reviewed (Step 4) — data gate passed (≥2 nodes, ≥1 rel type)
  • [ ] Use cases confirmed with user (Step 5)
  • [ ] CypherTemplate data_type taken from schema.json aura_data_type
  • [ ] SimilaritySearch index from schema.json metadata.vector_index (state=ONLINE)
  • [ ] Agent config shown to user and confirmed (Step 6)
  • [ ] Required fields present: name, description, dbid, is_private, tools (min 1)
  • [ ] AURA_AGENT_ID saved from create response
  • [ ] Agent invoked and response verified (Step 7)
  • [ ] Update/Delete confirmed by user before execution

Related skills

How it compares

Use as an agent-skill playbook with REST scripts, not a hosted MCP server or generic chat wrapper.

FAQ

Who is neo4j-aura-agent-skill for?

and small-team developers building GraphRAG or graph-aware assistants on Neo4j Aura who want API-driven agent lifecycle management from Claude Code, Cursor, or similar agents.

When should I use neo4j-aura-agent-skill?

During build when integrating agent-tooling against AuraDB—after loading a knowledge graph and before exposing an agent via REST or MCP to your product.

Is neo4j-aura-agent-skill safe to install?

The skill expects Aura client secrets and network calls to Neo4j cloud APIs; review the Security Audits panel on this page and scope credentials to a dedicated project before running manage scripts.

AI & Agent Buildingagentsautomation

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.