1. 项目概述当Neo4j遇上MCP图数据库的智能接口革命最近在折腾AI应用开发尤其是想给大模型接上自家的业务数据时发现了一个挺头疼的共性问题数据访问。传统的API调用方式对于像Neo4j这样的图数据库来说总感觉有点“隔靴搔痒”。图数据的魅力在于关系和路径而标准的REST API返回的JSON往往把这种网络结构拍平了大模型很难直接理解和利用其中的深层关联。直到我遇到了这个叫ezedinff/neo4j-mcp的项目它提供了一个基于模型上下文协议Model Context Protocol MCP的Neo4j服务器实现。简单说它让Neo4j摇身一变成了一个能被Claude Desktop、Cursor等AI智能体直接“理解”和“操作”的智能数据源。这个项目解决的核心痛点非常明确为大型语言模型LLM与Neo4j图数据库之间搭建一座高效、语义化、且安全的桥梁。它不是一个简单的查询包装器而是一个遵循MCP标准的服务器。这意味着任何兼容MCP的AI客户端比如你电脑上装了MCP插件的Claude都能像调用本地工具一样自然地查询、探索甚至更新你的Neo4j数据库。想象一下你可以直接对AI说“帮我找出所有与项目‘Alpha’有过合作且擅长‘机器学习’的工程师并按合作紧密程度排序”AI就能通过这个MCP服务器理解你的意图生成并执行高效的Cypher查询最后把结果以AI友好同时也对人友好的方式呈现出来。它适合谁呢首先是AI应用开发者尤其是那些在构建基于知识图谱、社交网络分析、供应链关系等复杂关系数据的智能助手或Copilot。其次是数据分析师和业务人员他们可能不熟悉Cypher查询语言但希望通过自然语言与图数据库进行交互直观地发现数据中的模式和洞察。最后对于运维和架构师这个项目提供了一个标准化、可扩展的方式将图数据库能力安全地暴露给AI工作流是构建企业级AI基础设施的一个关键组件。2. 核心架构与MCP协议深度解析2.1 什么是MCP为什么它是关键要理解neo4j-mcp的价值必须先搞懂MCP是什么。Model Context Protocol 你可以把它想象成AI世界里的“USB-C”接口标准。在它出现之前每个AI应用如Claude、Cursor想连接外部数据源如数据库、API、文件系统都需要开发各自私有的、不兼容的插件或适配器既重复造轮子也不安全。MCP定义了一套标准协议用于服务器资源提供者和客户端AI应用之间的通信。服务器通过MCP向客户端宣告“我这里有哪些‘工具’Tools可以用有哪些‘资源’Resources可以读”。客户端则通过标准化的方式调用这些工具、读取这些资源。对于neo4j-mcp而言它就是一个MCP服务器它向AI客户端宣告的主要能力就是“我可以帮你查询和操作一个Neo4j数据库”。这种架构带来了几个根本性优势解耦与标准化AI应用客户端无需关心后端是Neo4j、MySQL还是PostgreSQL只要它们都实现了MCP服务器就能用同一套方式交互。数据库的维护和升级独立于AI应用。安全性提升MCP服务器运行在受控的环境通常是本地或私有网络AI客户端通过安全的进程间通信IPC或SSEServer-Sent Events连接它。数据库的凭据和连接信息只存在于MCP服务器配置中不会泄露给AI客户端。服务器可以实现精细的权限控制比如某些工具只读某些工具需要审核。能力动态发现AI客户端在连接时会自动获取服务器提供的所有工具和资源列表。这意味着当你给neo4j-mcp添加了新的查询模板或工具时AI客户端无需更新就能立即发现并使用这些新功能。2.2 neo4j-mcp 的组件与工作流neo4j-mcp项目本身结构清晰。它通常作为一个独立的服务运行。其核心工作流如下服务启动你配置好Neo4j数据库的连接信息URI、用户名、密码并启动neo4j-mcp服务器。服务器会初始化与Neo4j的连接池确保高效和线程安全并加载预定义或自定义的工具。协议握手AI客户端如Claude Desktop启动时会根据其配置找到neo4j-mcp服务器例如通过本地IPC Socket。双方进行MCP协议握手交换版本和能力信息。能力宣告neo4j-mcp服务器向客户端发送一个清单列出所有可用的“工具”。至少会包括一个核心工具例如query_neo4j。这个工具的描述中会包含其用途、所需的输入参数如一个Cypher查询字符串等信息。AI模型正是通过这些描述来学习如何调用该工具。自然语言交互你在AI客户端的聊天界面中输入“我们数据库里有多少个用户节点”意图理解与工具调用AI模型理解你的意图判断出需要使用query_neo4j工具。它会根据工具的定义构造一个结构化的调用请求其中包含生成的Cypher语句MATCH (u:User) RETURN count(u) AS userCount。查询执行与结果格式化MCP客户端将这个请求发送给neo4j-mcp服务器。服务器接收到请求后使用配置的数据库凭据安全地执行这条Cypher查询。结果返回Neo4j返回查询结果通常是一个包含userCount键值对的列表。neo4j-mcp服务器的一个关键职责是将Neo4j的原生结果可能包含节点、关系、路径等复杂对象序列化为MCP协议规定的、AI模型易于理解的格式通常是纯文本或结构化的JSON。这个过程可能包括将节点属性扁平化、将关系类型明确标出等。结果呈现格式化后的结果通过MCP协议返回给AI客户端AI模型再将其组织成自然语言回复给你“您的数据库中共有 1248 个用户节点。”注意neo4j-mcp默认可能只提供基础的查询工具。其强大之处在于可扩展性。你可以基于它定义更高级的“工具”例如find_influential_users 这个工具背后可能封装了一个复杂的、参数化的Cypher查询用户只需提供“影响力阈值”等简单参数而无需编写完整的Cypher。3. 从零开始部署与配置实战3.1 环境准备与依赖安装假设我们已经在本地或远程服务器上运行了一个Neo4j 5.x 实例并且有一个测试用的数据库。我们的目标是在同一台机器或可达的网络环境中部署neo4j-mcp。首先我们需要准备Python环境。项目通常需要Python 3.8。强烈建议使用虚拟环境来隔离依赖。# 1. 克隆项目仓库假设使用Git git clone https://github.com/ezedinff/neo4j-mcp.git cd neo4j-mcp # 2. 创建并激活虚拟环境 python -m venv .venv # 在Windows上 .venv\Scripts\activate # 在Linux/macOS上 source .venv/bin/activate # 3. 安装项目依赖 # 通常项目会提供 requirements.txt pip install -r requirements.txt # 如果项目使用 poetry 或 pdm请参照其对应文档关键依赖通常包括mcpMCP协议的Python SDK这是核心。neo4j官方的Neo4j Python驱动用于连接数据库。pydantic/typing-extensions用于数据验证和类型提示。uvicorn/fastapi如果服务器采用HTTP/SSE传输方式可能需要这些ASGI服务器。3.2 核心配置详解配置是连接Neo4j和定义服务器行为的关键。neo4j-mcp通常会通过环境变量或配置文件如config.yaml来读取配置。一个最基础的配置需要指定Neo4j的连接信息# config.yaml 示例 neo4j: uri: bolt://localhost:7687 # 或者 neo4j://localhost:7687 (Neo4j 4.0) database: neo4j # 默认数据库可以是其他你创建的数据库名 username: neo4j password: your_secure_password_here # 务必使用强密码 server: host: 0.0.0.0 # 绑定地址 port: 8000 # 服务端口 # 传输方式可以是 stdio进程间或 sseHTTP transport: sse配置要点与避坑指南URI协议选择bolt://是Neo4j的二进制协议高效。neo4j://是Neo4j 4.0引入的“路由”协议适用于集群环境客户端驱动会自动发现集群中的读写实例。对于单机实例两者通常都可。如果连接失败首先检查协议和端口是否正确。数据库选择Neo4j 4.0支持多数据库。如果你创建了名为mydb的数据库这里就填mydb。默认是neo4j系统数据库。密码安全绝对不要将密码硬编码在代码或明文配置文件中提交到版本控制系统。务必使用环境变量export NEO4J_PASSWORDyour_password然后在配置中引用password: ${NEO4J_PASSWORD}。生产环境应使用密钥管理服务。传输方式stdio模式适用于Claude Desktop等将MCP服务器作为子进程启动的场景通信效率最高。sse(Server-Sent Events) 模式则是一个HTTP服务器更通用方便远程调试但需注意网络安全。3.3 服务启动与客户端连接配置好后就可以启动服务器了。启动方式取决于项目的具体设计通常是一个Python脚本。# 假设主入口文件是 server.py python server.py --config config.yaml如果使用sse传输启动后你会看到类似Uvicorn running on http://0.0.0.0:8000的日志。此时服务器已在8000端口监听。接下来是配置AI客户端。以Claude Desktop为例打开Claude Desktop设置找到“开发者设置”或“MCP服务器”配置部分。添加一个新的MCP服务器配置。对于sse模式配置可能是一个JSON文件指向本地运行的neo4j-mcp服务器// 在Claude Desktop的配置目录如 ~/Library/Application Support/Claude/claude_desktop_config.json中添加 { mcpServers: { neo4j: { command: npx, // 这里指示如何启动服务器对于SSE模式可能不需要command而是url args: [-y, mcp-server-sse-client, http://localhost:8000/sse] // 示例具体参数需参考项目文档 // 另一种更常见的方式是直接配置可执行文件和参数 // command: /path/to/your/.venv/bin/python, // args: [/path/to/neo4j-mcp/server.py, --config, /path/to/config.yaml] } } }实操心得Claude Desktop对MCP服务器的配置方式更新较快务必查阅其最新官方文档。stdio模式的配置通常更稳定它直接指定启动服务器的命令行。保存配置并重启Claude Desktop。重启后在聊天界面你应该能看到Claude有了新的能力比如一个数据库图标或者你可以直接尝试询问关于Neo4j数据的问题来测试连接是否成功。4. 高级功能与自定义工具开发4.1 封装业务查询为安全工具基础查询工具虽然强大但让AI直接生成并执行任意Cypher语句存在潜在风险如数据删除、复杂查询拖垮数据库。更佳实践是将常用的、安全的业务查询封装成具有明确参数的“工具”。假设我们有一个社交图想提供一个“查找共同朋友”的工具。我们可以在neo4j-mcp项目中扩展它。首先定义一个工具函数# 在项目的工具定义模块中例如 tools/community_tools.py from mcp.server.models import Tool async def find_mutual_friends(person_a_name: str, person_b_name: str) - str: 查找两个人之间的共同朋友。 参数: person_a_name: 第一个人物的姓名 person_b_name: 第二个人物的姓名 返回: 一个描述共同朋友列表的字符串。 # 这里是你的业务逻辑和数据库查询 query MATCH (a:Person {name: $person_a})-[:FRIEND_OF]-(mutual:Person)-[:FRIEND_OF]-(b:Person {name: $person_b}) RETURN mutual.name AS friend_name ORDER BY friend_name # 假设有一个全局的或注入的数据库会话驱动 driver records, summary, keys await driver.execute_query( query, person_aperson_a_name, person_bperson_b_name ) if not records: return f{person_a_name} 和 {person_b_name} 没有共同好友。 friend_list [rec[“friend_name”] for rec in records] return f{person_a_name} 和 {person_b_name} 的共同好友有{, .join(friend_list)}。然后将这个函数注册为MCP工具。这通常在服务器初始化时完成# 在 server.py 或主初始化逻辑中 from mcp.server import Server from .tools.community_tools import find_mutual_friends app Server(“neo4j-mcp-server”) # 注册工具 app.add_tool( Tool( name“find_mutual_friends”, description“查找两个指定人物之间的共同朋友。”, inputSchema{ “type”: “object”, “properties”: { “person_a_name”: {“type”: “string”, “description”: “第一个人物的姓名”}, “person_b_name”: {“type”: “string”, “description”: “第二个人物的姓名”}, }, “required”: [“person_a_name”, “person_b_name”] }, callbackfind_mutual_friends, # 关联到上面的函数 ) )现在当AI客户端连接时它会知道有一个叫find_mutual_friends的工具需要两个字符串参数。用户可以说“帮我找一下Alice和Bob的共同好友”AI就会自动调用这个封装好的工具而无需生成或接触原始的Cypher。这既安全又便捷。4.2 结果格式化与语义化增强Neo4j返回的原始记录可能包含复杂的图对象。直接将其扔给AI效果可能不理想。neo4j-mcp在结果格式化层可以做很多优化。例如一个查询返回了路径p (a)-[r:KNOWS]-(b)。原始结果可能是内部ID和属性字典。我们可以将其格式化为更易读的文本def format_path_result(records): formatted_lines [] for record in records: path record[“p”] # 假设path是neo4j.graph.Path对象 for i, node in enumerate(path.nodes): formatted_lines.append(f“节点 {i}: {node.get(name, N/A)} (标签: {list(node.labels)})”) for rel in path.relationships: formatted_lines.append(f“ 关系: ({rel.start_node.get(name)}) -[{rel.type}]- ({rel.end_node.get(name)})”) return “\n”.join(formatted_lines)更进一步我们可以根据查询的语义动态选择格式化策略。例如对于统计类查询返回表格对于路径查询返回叙述性描述对于单节点查询返回属性卡片。实操心得格式化逻辑是提升AI交互体验的关键。好的格式化应该1) 突出关键信息2) 结构清晰多用列表、缩进3) 去除数据库内部ID等无关噪音4) 对于空结果给出友好的提示。这部分代码通常放在工具的回调函数中或者在服务器层作为一个后处理中间件。5. 性能优化、安全与生产级考量5.1 连接池与查询性能neo4j-mcp作为中间层必须高效管理数据库连接。Neo4j Python驱动内置了连接池。from neo4j import AsyncGraphDatabase # 初始化驱动时配置连接池 driver AsyncGraphDatabase.driver( config[“neo4j”][“uri”], auth(config[“neo4j”][“username”], config[“neo4j”][“password”]), max_connection_pool_size50, # 根据负载调整 connection_acquisition_timeout30.0, # 秒 connection_timeout30.0, max_connection_lifetime3600, # 秒一小时后回收连接 )性能调优建议连接池大小不是越大越好。一般设置为(核心数 * 2) 磁盘数的公式不适用。从20-50开始根据实际并发查询数监控调整。监控Neo4j本身的“bolt”连接数。查询超时在工具函数或服务器层面为查询设置超时避免一个慢查询阻塞整个池。可以使用asyncio.wait_for。参数化查询务必使用参数化查询如上例中的$person_a而不是字符串拼接。这能防止Cypher注入并允许Neo4j服务器缓存执行计划大幅提升重复查询性能。限制结果集在提供给AI的工具中默认给查询加上LIMIT子句例如LIMIT 100 防止意外返回海量数据拖垮网络和AI上下文。5.2 安全加固实践将数据库暴露给AI安全是重中之重。最小权限原则为neo4j-mcp使用的数据库账户分配最小必要权限。如果AI只需要读数据就创建一个只有READ权限的角色。即使需要写也严格限制在特定的图模式或标签上。CREATE ROLE mcp_reader; GRANT MATCH {*} ON GRAPH neo4j NODES Person, Company, Relationship READ TO mcp_reader; GRANT TRAVERSE ON GRAPH neo4j ELEMENTS KNOWS, WORKS_FOR TO mcp_reader;输入验证与净化即使在封装工具中也要对输入参数进行验证。例如检查人名是否只包含允许的字符防止潜在的注入攻击虽然参数化查询防Cypher注入但逻辑注入仍需防范。审计日志记录所有通过MCP执行的查询。包括查询内容、执行时间、调用者可以传递一个会话ID或用户标识、结果行数。这有助于事后分析和异常检测。import logging query_logger logging.getLogger(“mcp.query_audit”) async def execute_query_with_log(query, parameters, user_context): start time.time() try: result await driver.execute_query(query, parameters) duration time.time() - start query_logger.info(f“User: {user_context}, Query: {query}, Params: {parameters}, Duration: {duration:.2f}s, Records: {len(result.records)}”) return result except Exception as e: query_logger.error(f“User: {user_context}, Query failed: {query}, Error: {e}”) raise网络隔离生产环境中neo4j-mcp服务器应与Neo4j数据库部署在同一私有网络VPC内。对外只暴露给可信的AI客户端网关或者仅通过本地IPC通信。5.3 监控、日志与高可用对于生产部署需要完善的观测性。健康检查端点如果使用HTTP/SSE模式增加一个/health端点检查数据库连接状态和连接池健康度。指标暴露集成Prometheus客户端如prometheus-client暴露指标如请求总数、查询延迟分布直方图、不同工具调用次数、数据库连接池使用情况、错误计数等。结构化日志使用JSON格式的结构化日志如structlog方便被ELK或Loki等日志系统收集和查询。高可用可以将neo4j-mcp部署为多个实例前面用负载均衡器如Nginx。由于MCP会话通常是无状态的或状态很轻这种方式可以水平扩展。确保所有实例连接到同一个Neo4j集群。6. 典型应用场景与案例剖析6.1 场景一智能知识图谱问答助手这是最直接的应用。假设你有一个存储了公司内部技术文档、项目、人员技能的知识图谱。数据模型(Document)-[:ABOUT]-(Technology)(Person)-[:HAS_SKILL]-(Skill)(Project)-[:USES]-(Technology)。MCP工具封装search_documents_by_topic(topic: str): 查找关于某个技术的文档。find_experts_for_technology(tech: str): 查找精通某项技术的员工。recommend_learning_path(current_skills: list, target_skill: str): 基于技能图谱推荐学习路径。交互示例用户“我想学习Kubernetes该看哪些内部文档”AI调用search_documents_by_topic(“Kubernetes”) 返回文档列表和链接。用户“我们组谁最懂微服务架构”AI调用find_experts_for_technology(“microservices”) 并可能结合find_mutual_friends来找到与你合作紧密的专家。实操心得在这种场景下工具的设计要贴近业务语言而不是数据库语言。输入输出要直观。例如find_experts返回的不仅仅是名字最好附带联系方式和相关项目经验简介这些信息可以从图谱的其他部分关联查询得到。6.2 场景二供应链风险探查与影响分析在复杂的供应链图谱中实体是供应商、工厂、产品、物流路线关系是供应、依赖、运输。数据模型(Supplier)-[:SUPPLIES]-(Component)(Component)-[:USED_IN]-(Product)(Factory)-[:LOCATED_IN]-(Region)。MCP工具封装find_single_source_components(): 找出只有一个供应商的“单点故障”组件。assess_impact_of_supplier_disruption(supplier_name: str): 模拟某供应商中断会影响哪些最终产品和工厂。find_alternative_suppliers(component_id: str, region: str): 在特定区域寻找替代供应商。交互示例分析师“如果‘芯片供应商A’停产对我们哪几条产品线影响最大影响程度如何”AI调用assess_impact_of_supplier_disruption(“芯片供应商A”) 执行一个可能涉及多跳遍历和聚合计算的复杂Cypher查询返回一个按产品线分类的影响报告甚至计算出潜在的营收损失如果图谱中有成本数据。避坑技巧供应链图谱的查询往往非常复杂可能涉及深度遍历和大量计算。务必在这些工具中设置查询超时和深度限制apoc.path.expandConfig中的maxLevel。考虑将一些特别耗时的分析预计算为物化视图或定时更新的子图工具直接查询这些快照以换取查询速度。6.3 场景三代码库与架构依赖分析将代码库、微服务、API、数据库表建模成图关系是调用、依赖、导入。数据模型(Microservice)-[:CALLS]-(API)(API)-[:QUERIES]-(DatabaseTable)(CodeFile)-[:IMPORTS]-(Library)。MCP工具封装trace_dependency(start_service: str, depth: int): 追踪某个服务的所有下游或上游依赖。find_circular_dependencies(): 检测架构中的循环依赖。impact_of_changing_api(api_name: str): 评估修改某个API会影响哪些服务。交互示例开发人员“我打算重构UserService的登录接口会影响谁”AI调用impact_of_changing_api(“UserService.login”) 返回一个依赖该接口的服务列表并可视情况标注出测试覆盖率低的服务作为高风险项。注意事项这类图谱的数据需要从代码仓库、CI/CD流水线、部署配置中定期或实时同步更新。neo4j-mcp可以不仅提供查询工具还可以封装数据更新工具需谨慎授权例如trigger_dependency_graph_update() 让AI助手在代码合并后触发图谱更新任务。7. 故障排查与常见问题实录在实际部署和使用neo4j-mcp过程中你肯定会遇到各种问题。下面是我踩过的一些坑和解决方案。7.1 连接与认证问题问题1启动neo4j-mcp服务器时日志报错 “Neo4jError: Failed to connect to server”。排查步骤检查Neo4j服务状态systemctl status neo4j(Linux) 或直接在浏览器访问http://localhost:7474看Neo4j Browser能否打开。验证连接信息确认配置中的URI、端口、数据库名完全正确。注意bolt://默认端口是7687http://或https://是7474用于Browser驱动一般用bolt。防火墙与网络如果Neo4j在远程服务器检查服务器防火墙和网络安全组是否放行了7687端口。在服务器本地用neo4j用户通过cypher-shell或neo4j-admin测试连接。协议与加密Neo4j 5 默认可能强制使用加密连接。确保驱动版本与Neo4j版本兼容并检查加密设置。在neo4j.conf中dbms.connector.bolt.tls_level设置为OPTIONAL或DISABLED可以临时关闭加密进行测试生产环境不推荐。密码过期首次安装Neo4j后默认密码是neo4j/neo4j 登录后会强制要求修改。确保你使用的是修改后的密码。问题2连接成功但执行查询时报 “Neo.ClientError.Security.Unauthorized” 或权限错误。原因与解决连接使用的数据库用户没有执行特定操作如写操作、创建索引的权限。解决使用具有管理员权限的账户如neo4j登录Neo4j Browser为用户分配正确的角色和权限。遵循最小权限原则为MCP服务创建专属角色。7.2 MCP客户端连接与工具发现问题问题3Claude Desktop重启后看不到Neo4j相关的工具或功能。排查步骤检查MCP服务器日志首先确认neo4j-mcp服务器是否正在运行且无报错。查看其启动日志确认它成功加载了工具列表。检查Claude Desktop配置确认配置文件路径正确JSON格式无误。一个常见的错误是JSON中的逗号或引号错误。可以使用JSON验证器检查。查看Claude Desktop日志Claude Desktop通常有应用日志位置因操作系统而异。在日志中搜索 “MCP”、 “neo4j” 或 “error” 关键词看是否有连接失败或协议错误的记录。传输模式匹配确认服务器配置的传输模式stdio/sse与客户端配置的启动方式匹配。stdio模式要求配置command和args来启动服务器进程sse模式则通常配置一个URL。重启顺序有时需要先启动MCP服务器再启动Claude Desktop。或者尝试在Claude Desktop设置中手动重新扫描/加载MCP服务器。7.3 查询执行与性能问题问题4通过AI执行查询非常慢甚至超时。可能原因AI生成的Cypher不优如果使用基础的query_neo4j工具AI可能生成未加索引或低效的查询。例如它可能使用了WHERE n.property value而没有在property上建立索引。查询过于复杂AI可能生成涉及大量节点或深度遍历的查询。数据库负载高同一时间有其他重型查询在运行。解决方案封装工具代替原始查询这是根本解决方法。用精心编写和优化过的参数化查询来封装业务逻辑。在工具中增加限制在所有返回列表的工具中默认添加LIMIT。可以提供分页参数。为常用查询字段创建索引在Neo4j中为经常用于WHERE、MATCH条件的节点属性创建索引或复合索引。CREATE INDEX person_name_index FOR (p:Person) ON (p.name); CREATE INDEX document_topic_index FOR (d:Document) ON (d.topic);监控与优化在Neo4j Browser中使用EXPLAIN或PROFILE前缀来分析AI生成的低效查询找到瓶颈如全节点扫描然后优化数据模型或创建索引。问题5查询结果格式混乱AI难以理解。解决这是neo4j-mcp结果格式化层的责任。你需要增强结果格式化函数。确保将节点和关系转换为清晰的文本描述。对于多个结果使用编号列表或表格形式。隐藏数据库内部ID等无关信息。对于空结果返回友好的提示语如“未找到符合条件的数据”。7.4 扩展与开发问题问题6我想添加一个新的自定义工具但修改代码后重启服务器客户端看不到新工具。排查工具注册逻辑确保新工具的函数被正确导入并且在服务器初始化时通过app.add_tool()成功注册。检查是否有语法错误导致工具注册代码未执行。MCP协议缓存某些客户端可能会缓存服务器提供的工具列表。尝试完全重启客户端Claude Desktop或者等待客户端重新与服务器握手有些客户端会定期刷新。服务器热重载开发时可以考虑使用像uvicorn的--reload功能如果基于HTTP或者实现一个信号机制让服务器在代码变更时重新加载工具模块。但生产环境通常需要重启服务。问题7如何处理复杂的、需要多个查询步骤才能回答的用户问题模式这是AI智能体的核心能力。neo4j-mcp提供的是“原子工具”。AI负责编排。例如用户问“给Alice推荐一个她可能认识的、在机器学习项目工作的人”。AI可以规划第一步调用get_person_details(“Alice”)获取Alice的技能和项目。第二步调用find_people_by_skill(skill_list)找到有相同技能的人。第三步调用find_people_in_project(project_name)找到在相关项目的人。第四步对结果进行交集、排序最后生成回答。你的工作确保每个原子工具都设计良好、功能单一、性能可靠。AI会负责组合它们。你可以在工具描述中提供更丰富的上下文帮助AI更好地理解何时使用该工具。