AWS Marketplace: AgentCore 上的 Neo4j MCP

简介

本指南介绍了如何使用 AWS CLI 将 AWS Marketplace 中的 Neo4j MCP 服务器部署到 Amazon Bedrock AgentCore。仅需一个 shell 脚本即可创建所需的 IAM 角色和 AgentCore 运行时——无需 CDK 或基础设施即代码 (IaC)。

核心功能

  • AWS Marketplace 镜像:使用发布在 AWS Marketplace 上的官方 Neo4j MCP 容器

  • 仅需 CLI 部署:单个 deploy.sh 脚本即可完成——无需 CDK、CloudFormation 或 Docker 构建

  • IAM 身份验证:通过 AWS IAM 实现安全、公共的运行时访问

  • 基于 Header 的 Neo4j 身份验证:Neo4j 凭据通过自定义授权标头按请求传递

应用场景

  • 快速概念验证 (PoC) 部署,设置极其简单

  • 无法使用 CDK 或 CloudFormation 的环境

  • 在采用基础设施即代码之前探索 Neo4j MCP 的功能

若需基于 CDK 的部署,请参阅 示例 1:MCP 运行时 - Docker

架构设计

组件

  1. AWS AgentCore 运行时

    • 托管代理执行环境

    • 运行来自 AWS Marketplace 的 Neo4j MCP 容器

    • 带有 IAM 身份验证的公共网络模式

  2. Neo4j MCP 容器 (AWS Marketplace)

    • 官方 Neo4j MCP 服务器镜像:709825985650.dkr.ecr.us-east-1.amazonaws.com/neo4j/mcp:v0.1.7

    • 端口 8000 上的无状态 HTTP MCP 服务器

    • 提供用于模式检查、Cypher 执行和图探索的 MCP 工具

  3. IAM 角色

    • 针对 bedrock-agentcore.amazonaws.com 的信任策略

    • 用于 ECR 镜像拉取、CloudWatch 日志、X-Ray 和 CloudWatch 指标的权限

  4. 自定义授权标头

    • X-Amzn-Bedrock-AgentCore-Runtime-Custom-Authorization 标头

    • Neo4j 凭据由调用代理在每次请求中转发

    • 容器环境中不存储任何凭据

  5. Neo4j 数据库

    • 任何可达的 Neo4j 实例(Aura、Desktop 或自托管)

    • 默认演示:neo4j+s://demo.neo4jlabs.com:7687(公司数据库)

深度分析

身份验证流程

User/Agent Request
    |
[AWS IAM Authentication + Neo4j credentials via X-Amzn-Bedrock-AgentCore-Runtime-Custom-Authorization header]
    |
AgentCore Runtime (Public)
    |
Neo4j MCP Server (HTTP mode)
    |
[Extract Basic Auth from custom header]
    |
Neo4j Database

安全层

  1. IAM 身份验证:控制谁可以调用运行时

  2. 公共运行时:可通过 IAM 访问,无需 VPC

  3. 按请求认证:Neo4j 凭据通过自定义标头以 Basic <base64(user:password)> 格式传递

  4. TLS 加密:通过 neo4j+s:// 安全连接至 Neo4j

环境变量

变量 必填 默认 目的

NEO4J_URI

-

Neo4j 连接 URI

NEO4J_DATABASE

neo4j

目标数据库名称

NEO4J_READ_ONLY

true

限制为只读操作

NEO4J_HTTP_AUTH_HEADER_NAME

-

Neo4j 凭据的自定义标头名称

NEO4J_HTTP_ALLOW_UNAUTHENTICATED_PING

true

允许未经身份验证的健康检查

NEO4J_LOG_LEVEL

info

日志详细程度

NEO4J_LOG_FORMAT

文本 (text)

日志格式 (textjson)

可用的 MCP 工具

Tool 只读 目的

get-schema

内省标签、关系类型和属性键

read-cypher

执行只读 Cypher 查询

write-cypher

执行写入 Cypher 查询(需启用写入访问权限)

list-gds-procedures

列出可用的图数据科学 (GDS) 过程

有关完整工具参考,请参阅 官方 Neo4j MCP 服务器文档

如何使用此示例

先决条件

  • 具备 Bedrock 和 AgentCore 访问权限的 AWS 账户

  • 配置了适当凭据的 AWS CLI

  • 一个运行中的 Neo4j 数据库(或使用公共演示数据库)

第一步:配置

编辑 deploy.sh 顶部的配置变量

REGION="us-east-1"
RUNTIME_NAME="neo4j_mcp"
CONTAINER_URI="709825985650.dkr.ecr.us-east-1.amazonaws.com/neo4j/mcp:v0.1.7"

NEO4J_URI="neo4j+s://demo.neo4jlabs.com:7687"
NEO4J_DATABASE="companies"
NEO4J_READ_ONLY="true"

默认值指向公共 Neo4j 公司演示数据库。若要使用您自己的实例,请替换 NEO4J_URINEO4J_DATABASE

第二步:部署

chmod +x deploy.sh
./deploy.sh

脚本将:

  1. 使用所需的信任策略和权限创建一个 IAM 角色 (Neo4jMCPRole)

  2. 使用市场容器镜像创建一个 AgentCore 运行时

  3. 打印 AgentRuntimeId 以便在后续步骤中使用

第三步:检查运行时状态

aws bedrock-agentcore-control get-agent-runtime \
  --agent-runtime-id <AGENT_RUNTIME_ID>

在调用之前,请等待运行时状态变为 ACTIVE

第四步:测试运行时

安装 Python 客户端依赖项

pip install mcp-proxy-for-aws strands-agents boto3

连接并调用工具

from urllib.parse import quote
from mcp_proxy_for_aws.client import aws_iam_streamablehttp_client
from strands.tools.mcp import MCPClient
import base64
import boto3

arn = "<AGENT_RUNTIME_ARN>"
neo4j_user = "companies"
neo4j_password = "companies"

ENCODED_ARN = quote(arn, safe="")
credentials = base64.b64encode(f"{neo4j_user}:{neo4j_password}".encode()).decode()
region = boto3.Session().region_name

mcp_client = MCPClient(lambda: aws_iam_streamablehttp_client(
    endpoint=f"https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{ENCODED_ARN}/invocations?qualifier=DEFAULT",
    aws_region=region,
    aws_service="bedrock-agentcore",
    headers={
        "X-Amzn-Bedrock-AgentCore-Runtime-Custom-Authorization": f"Basic {credentials}",
    },
))
mcp_client.start()

# List available tools
result = mcp_client.list_tools_sync()
for t in result:
    print(f"- {t.tool_name}: {t.tool_spec.get('description')}")

# Get schema
result = mcp_client.call_tool_sync("1", "get-schema")
print(result)

# Run a Cypher query
result = mcp_client.call_tool_sync(
    "2",
    "read-cypher",
    tool_input={"query": "MATCH (n) RETURN labels(n) AS labels, count(*) AS count ORDER BY count DESC LIMIT 10"},
)
print(result)

第五步:清理

# Delete the AgentCore runtime
aws bedrock-agentcore-control delete-agent-runtime \
  --agent-runtime-id <AGENT_RUNTIME_ID>

# Remove the IAM role policy and role (use the role name printed by deploy.sh)
aws iam delete-role-policy --role-name <ROLE_NAME> --policy-name Neo4jMCPRuntimePolicy
aws iam delete-role --role-name <ROLE_NAME>

CDK 替代方案

如果您更喜欢基础设施即代码,示例 1:MCP 运行时 - Docker 提供了完整的 AWS CDK 部署方案。

© . This site is unofficial and not affiliated with Neo4j, Inc.