Manages Neo4j Aura Agents via the v2beta1 REST API — create, list, get, update, delete, and invoke Aura agents backed by an AuraDB instance. Use when configuring Aura Agent tools (CypherTemplate, SimilaritySearch, Text2Cypher), setting system prompts, deploying agents to REST or MCP endpoints, or invoking agents with natural language queries. Covers OAuth2 auth, organization/project scoping, tool parameter schemas, and InvokeAgentResponse format. Does NOT cover AuraDB instance provisioning — use neo4j-aura-provisioning-skill. Does NOT cover vector index creation — use neo4j-vector-index-skill.
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 instances →
neo4j-aura-provisioning-skill
Creating vector indexes →
neo4j-vector-index-skill
Running Cypher directly →
neo4j-cypher-skill
Building Aura Graph Analytics sessions →
neo4j-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
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:
json
{"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:
bash
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)
bash
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):
bash
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?"}'
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:
bash
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.
json
{"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\", ...>"}]}}
{"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.
json
{"type":"text2cypher","name":"<descriptive name>","description":"<what questions it handles — and explicitly what it should NOT handle>","enabled":true}
Common Errors
Error
Cause
Fix
401 Unauthorized
Token expired
Re-run Step 1
403 Forbidden
on create
Not a project admin
Request admin access
400 Bad Request
Invalid tool config or missing required field
Check
type
spelling:
cypherTemplate
,
similaritySearch
,
text2cypher
404 Not Found
Wrong org/project/agent ID
Re-run
list
to verify IDs
400
on create with SimilaritySearch
Vector index missing
Create index first — use
neo4j-vector-index-skill
Agent returns no results
top_k
too low or index empty
Increase
top_k
; verify index is populated
Scripts
All scripts load credentials from
.env
automatically. Run with
uv run python3 <script>
.
Script
Purpose
scripts/fetch_schema.py
Fetch graph schema from AuraDB; save to
schema.json
scripts/manage_agent.py
CRUD: list, create, get, update, delete agents
scripts/invoke_agent.py
Send a natural language query to an agent
fetch_schema.py parameters:
Parameter
Type
Required
Default
NEO4J_URI
env
Yes
—
NEO4J_USERNAME
env
No
neo4j
NEO4J_PASSWORD
env
Yes
—
NEO4J_DATABASE
env
No
neo4j
manage_agent.py parameters:
Parameter
Type
Required
Env fallback
AURA_CLIENT_ID
env
Yes
—
AURA_CLIENT_SECRET
env
Yes
—
--org-id
arg
No
AURA_ORG_ID
--project-id
arg
No
AURA_PROJECT_ID
--agent-id
arg
get/update/delete
AURA_AGENT_ID
--config
arg
create/update
—
invoke_agent.py parameters:
Parameter
Type
Required
Env fallback
AURA_CLIENT_ID
env
Yes
—
AURA_CLIENT_SECRET
env
Yes
—
--org-id
arg
No
AURA_ORG_ID
--project-id
arg
No
AURA_PROJECT_ID
--agent-id
arg
Yes
AURA_AGENT_ID
query
positional
Yes
—
--raw
flag
No
—
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)