claude-agent-sdk-python 自定义工具开发:5分钟把 Claude 接进你的业务系统
claude-agent-sdk-python 自定义工具开发5分钟把 Claude 接进你的业务系统【免费下载链接】claude-agent-sdk-python项目地址: https://gitcode.com/GitHub_Trending/cl/claude-agent-sdk-python想让 Claude 自动改代码Bash 权限一放就翻车想接自己的数据库外部 MCP 又得另起进程。claude-agent-sdk-python 一次解决进程内 MCP 自定义工具、钩子拦截、细粒度权限回调。30秒安装启动要求只有 Python 3.10。装一条命令即可Claude Code CLI 已随 wheel 打包不用单独安装。pip install claude-agent-sdk想看源码和示例的话把仓库拉下来git clone https://gitcode.com/GitHub_Trending/cl/claude-agent-sdk-python就这些。Python 之外的依赖anyio、mcp、jsonschema随包自动装好。跑通第一个查询9行代码下面这段是query()的最小用法发一句话收回答import anyio from claude_agent_sdk import query, AssistantMessage, TextBlock async def main(): async for msg in query(promptWhat is 2 2?): if isinstance(msg, AssistantMessage): for b in msg.content: if isinstance(b, TextBlock): print(b.text) anyio.run(main)跑起来你会看到回答通常就是干净的 4。注意一个关键点迭代出来的不是 JSON 字符串而是带类型的对象可以按类型精确筛选和处理。从能力地图里选对你的入口SDK 的 API 面看着大其实按你要做什么可以压成四条路。多轮对话用 ClaudeSDKClient 接住上下文query()是一次性的上下文不留存要让 Claude 记住前一轮、继续追问用客户端。关键入口ClaudeSDKClient。async with ClaudeSDKClient() as client: await client.query(总结这个项目的报错日志) async for msg in client.receive_response(): print(msg)这意味着你可以做聊天界面receive_response()收到 ResultMessage 自动停止退出上下文时连接自动清理多轮追问时 Claude 一直记得前文。内置工具调用用白名单管住权限Claude 自带 Read、Write、Bash 等工具。allowed_tools是自动批准白名单——它不删除工具本身只决定哪些不用逐次确认。关键入口ClaudeAgentOptions。options ClaudeAgentOptions( allowed_tools[Read, Grep, Bash], permission_modeacceptEdits, )这意味着你可以放心让 Claude 在项目目录里读写文件、跑命令用permission_mode再细调授权档位acceptEdits、plan、dontAsk等。实时控制中途喊停和换模式长任务失控是生产场景最常见的事故。客户端支持运行中打断、切换权限模式。关键入口client.interrupt() / client.set_permission_mode()。async with ClaudeSDKClient() as client: await client.query(写一份一万字的分析) await client.interrupt() # 立即停 await client.set_permission_mode(plan) # 切到只规划不执行这意味着你的应用可以做紧急停止按钮也可以先规划、批准后再执行的两段式流程。自定义工具三步接进进程内 MCP自定义工具就是跑在你应用同进程里的 Python 函数没有子进程、没有 IPC还能直接碰你的业务对象。关键入口tool / create_sdk_mcp_server三步走tool定义函数 →create_sdk_mcp_server注册 → 塞进 options。options ClaudeAgentOptions( mcp_servers{db: server}, # create_sdk_mcp_server() 的返回值 allowed_tools[mcp__db__query_orders], # 命名格式mcp__服务名__工具名 )这意味着任何 Python 函数——查库、调内部 API、读配置——都能变成 Claude 会自己挑着用的工具。扩展实战把 Claude 接进 SQLite 数据库场景订单数据在一个 SQLite 文件里你想让 Claude 用自然语言回答订单总额多少而且只许读、不许写。第一步准备数据换成你自己的库文件即可import sqlite3 con sqlite3.connect(orders.db) con.execute(CREATE TABLE IF NOT EXISTS orders(id INTEGER, date TEXT, amount REAL)) con.executemany(INSERT INTO orders VALUES (?,?,?), [(1, 2026-09-10, 99.5), (2, 2026-09-12, 200.0)]) con.commit(); con.close()第二步定义工具函数。重点看两处SELECT 限制挡住一切写操作is_error标记把错误传回给 Claude让它自己换条路import json from claude_agent_sdk import tool tool(query_orders, 查询订单表仅允许 SELECT返回 JSON, {sql: str}) async def query_orders(args): sql args[sql].strip() if not sql.upper().startswith(SELECT): return {content: [{type: text, text: 只允许 SELECT}], is_error: True} con sqlite3.connect(orders.db) rows con.execute(sql).fetchall() con.close() return {content: [{type: text, text: json.dumps(rows, ensure_asciiFalse)}]}第三步注册工具并开聊import asyncio from claude_agent_sdk import ClaudeAgentOptions, ClaudeSDKClient, create_sdk_mcp_server server create_sdk_mcp_server(namedb, tools[query_orders]) options ClaudeAgentOptions(mcp_servers{db: server}, allowed_tools[mcp__db__query_orders]) async def main(): async with ClaudeSDKClient(optionsoptions) as client: await client.query(订单总额是多少) async for msg in client.receive_response(): print(msg) asyncio.run(main())跑起来后Claude 会自己写出SELECT SUM(amount) FROM orders调用你定义的函数最终答出 299.5。因为工具函数和你的应用同进程它随时可以直接复用你的数据库连接和业务对象——这就是进程内 MCP 相比外部进程的价值。搭好防御层异常、拦截与安全线先认识异常。全部继承自ClaudeSDKError最外层兜底捕它即可。注意捕获顺序子类在前。异常触发场景应对动作CLINotFoundError找不到 Claude Code CLI检查安装或在 options 里指定cli_pathCLIConnectionError与 CLI 进程连不上/断了检查环境重试ProcessErrorCLI 进程非零退出读e.exit_code和e.stderrResultError运行以错误结果收尾max_turns、API 错误等按e.subtype/e.terminal_reason分支决定是否重试CLIJSONDecodeErrorCLI 输出无法解析为 JSON升级 SDK/CLI带着出错行报障完整定义在 src/claude_agent_sdk/_errors.py。权限线交给can_use_tool每次工具调用前你的回调先审一遍可以拒绝也可以改写输入。from claude_agent_sdk import ClaudeAgentOptions, PermissionResultAllow, PermissionResultDeny async def guard(tool_name, input_data, context): if tool_name Bash and rm -rf in input_data.get(command, ): return PermissionResultDeny(message危险命令已拒绝) return PermissionResultAllow() options ClaudeAgentOptions(can_use_toolguard, permission_modedefault)跑起来后Claude 一旦想执行rm -rf会被直接拦下并把理由回传给它其余工具放行。回调还能用updated_input改写参数比如把写入路径重定向到安全目录完整做法见 examples/tool_permission_callback.py。⚠️ 三条安全提醒permission_modebypassPermissions会跳过所有检查只在沙箱里用自定义工具和应用同进程工具函数里的输入校验如上例的 SELECT 限制是最后一道防线工具输出别不经过滤直接展示给用户防提示注入。进阶速览流式、混合部署与会话管理流式增量include_partial_messagesTrue让生成过程中持续吐出增量文本适合逐字上屏的界面。options ClaudeAgentOptions(include_partial_messagesTrue)混合 MCP 部署进程内服务器和外部 stdio 服务器可以挂在同一个mcp_servers里。mcp_servers{local: sdk_server, remote: {type: stdio, command: your-server}}会话持久化与分叉挂一个 SessionStore会话可跨重启恢复还能fork_session()拉出实验分支。options ClaudeAgentOptions(session_storeInMemorySessionStore())版本迁移0.1.0 把ClaudeCodeOptions改名为ClaudeAgentOptions并合并了系统提示配置对照见 CHANGELOG.md。按需查资源类型定义消息、内容块、选项全在这src/claude_agent_sdk/types.py示例合集查询、流式、钩子、权限回调都有examples/端到端测试场景看各特性怎么组合e2e-tests/版本变更记录CHANGELOG.md你现在能跑通一次性查询、做多轮对话还能把任意 Python 函数变成 Claude 的工具。下一步把实战里的 SQLite 表换成你自己的业务表再给 guard 回调加一条你们最怕的命令。【免费下载链接】claude-agent-sdk-python项目地址: https://gitcode.com/GitHub_Trending/cl/claude-agent-sdk-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

微信占满C盘?三步迁移文件+清理缓存,彻底释放空间

微信占满C盘?三步迁移文件+清理缓存,彻底释放空间

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/22 0:07:07 阅读更多 →
Zephyr与nRF Connect SDK环境搭建避坑指南

Zephyr与nRF Connect SDK环境搭建避坑指南

1. 为什么这个避坑指南值得你花20分钟认真读完Zephyr RTOS和nRF Connect SDK的组合,是当前低功耗蓝牙(BLE)物联网设备开发的事实标准。我带过三支嵌入式团队,从智能手环到工业传感器网关,几乎全部踩过环境搭建的坑——…

2026/9/21 15:18:17 阅读更多 →
Docker零基础入门:镜像、容器与安装实战指南

Docker零基础入门:镜像、容器与安装实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/22 0:48:17 阅读更多 →

最新新闻

游戏退款系统源码解析:3步搞定支付逆向工程

游戏退款系统源码解析:3步搞定支付逆向工程

游戏退款系统源码解析:3步搞定支付逆向工程 别再把时间浪费在翻几百页的《支付网关接入指南》上了。官方文档里全是合规废话,真正能跑通的逻辑藏在几行核心代码里。 很多后端新手接到“游戏退款”需求时,第一反应是去查 API…

2026/9/22 1:24:32 阅读更多 →
教育的本质:3个避坑指南让你面试不再答非所问

教育的本质:3个避坑指南让你面试不再答非所问

教育的本质:3个避坑指南让你面试不再答非所问 面试被问“教育的本质”时,你脑子里是不是还卡在“传道授业解惑”的背词阶段?别慌,大多数开发者都栽在这个看似文科、实则硬核的逻辑陷阱里。今天这篇避坑指南,不聊虚的,直接拆解这道题背后的性能优化逻辑…

2026/9/22 1:24:32 阅读更多 →
N43实战:从零搭建高效刷题系统

N43实战:从零搭建高效刷题系统

N43实战:从零搭建高效刷题系统 刚毕业那会儿,我手里攥着几份大厂给的算法题,复制代码到本地跑,结果直接报错。报错信息满屏红字,根本看不懂哪行出了问题。那种挫败感,谁懂?后来我发现,问题不在代码,在于环境配置和依赖管理太混乱。今天分享一套…

2026/9/22 1:24:31 阅读更多 →
综艺节目游戏性能优化:告别StackTrace报错,掌握最佳实践

综艺节目游戏性能优化:告别StackTrace报错,掌握最佳实践

综艺节目游戏性能优化:告别StackTrace报错,掌握最佳实践 凌晨三点,控制台里滚动的红色报错让人头皮发麻。StackTrace 堆栈长得像天书,一行行 at com.game.core...…

2026/9/22 1:24:31 阅读更多 →
3招搞定解压缩文件性能优化:从Python到Rust实战对比

3招搞定解压缩文件性能优化:从Python到Rust实战对比

3招搞定解压缩文件性能优化:从Python到Rust实战对比 你是不是也遇到过这种情况?网上复制了一段解压缩文件的代码,往本地一跑,直接报错 FileNotFoundError…

2026/9/22 1:24:31 阅读更多 →
3行代码跑通psp图:源码解析帮你彻底搞懂原理

3行代码跑通psp图:源码解析帮你彻底搞懂原理

3行代码跑通psp图:源码解析帮你彻底搞懂原理 刚拿到这份psp图代码,是不是满屏报错?别慌,复制来的代码跑不通不知道怎么调,这是每个新手入行的第一道坎。今天咱们不整虚的,直接拆解psp图的底层逻辑,用源码解析的方式,带你从原理到实战,一步…

2026/9/22 1:23:30 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →