一、MCP配置前期准备

(一)创建个人令牌/群组令牌

我这里是创建个人令牌,去到首页左上角,点击头像——>偏好设置——>访问令牌——>添加新令牌

(二)配置mcp信息

去到魔塔社区,点击mcp广场,然后搜索gitlab,把刚刚生成的个人令牌粘贴进去

这里的url如果是你自己部署的话,就替换前面的域名即可,比如https://gitlab.com/api/v4就换成http://ip:端口/api/v4,配置完后就会生成对应的sse配置信息

二、Claude Code SDK 配置

这里有一个巨巨巨巨巨坑,正常我们在终端使用claude的时候,偶尔会弹出让你是否确认创建某个文件夹或者其他的操作等信息,如下:

这是cc的一个权限机制,在claude code的文档里面也有提到:

更详细的可以看这篇文章:Claude Code权限模式详解:Default、AcceptEdits、Plan、BypassPermissions四种模式 - 博客 - Hrefgo AI

(一)代码示例

import asyncio
import os
import tracebackfrom datetime import datetime, timedeltafrom claude_code_sdk import ClaudeSDKClient, ClaudeCodeOptions
from claude_code_sdk.types import (ResultMessage, AssistantMessage, TextBlock,ToolUseBlock, ToolResultBlock
)
from claude_code_sdk._errors import CLIConnectionErroros.environ["ANTHROPIC_API_KEY"] = "你的api key"
os.environ["ANTHROPIC_BASE_URL"] = "https://api.moonshot.cn/anthropic"async def chat():"""Claude Code 聊天助手(每次请求独立客户端,避免流冲突)"""client = Noneresponses = []try:# 每次请求都创建新客户端(避免复用导致的流冲突)mcp_servers = {"mcp-gitlab-server": {"type": "sse","url": "你在魔塔生成的url"}}options = ClaudeCodeOptions(cwd=".",permission_mode="bypassPermissions",  # 绕过权限(!很重要,不然执行不了)mcp_servers=mcp_servers)client = ClaudeSDKClient(options=options)# 连接await client.connect()prompt = "使用mcp-gitlab-server这个mcp工具帮我在gitlab仓库中创建一个名为camel_test的项目"await client.query(prompt, session_id="123456")try:async for message in client.receive_messages():if isinstance(message, AssistantMessage):for block in message.content:if isinstance(block, TextBlock):responses.append({"role": "assistant","content": block.text.strip(),"type": "text"})print({"role": "assistant","content": block.text.strip(),"type": "text"})elif isinstance(block, ToolUseBlock):responses.append({"role": "assistant","content": f"使用工具: {block.name}","type": "tool","metadata": {"tool_name": block.name, "parameters": block.input}})print({"role": "assistant","content": f"使用工具: {block.name}","type": "tool","metadata": {"tool_name": block.name, "parameters": block.input}})elif isinstance(message, ToolResultBlock):status = "成功" if not message.is_error else "失败"responses.append({"role": "system","content": f"工具执行{status}: {message.content}","type": "tool_result","metadata": {"is_error": message.is_error, "tool_use_id": message.tool_use_id}})print({"role": "system","content": f"工具执行{status}: {message.content}","type": "tool_result","metadata": {"is_error": message.is_error, "tool_use_id": message.tool_use_id}})elif isinstance(message, ResultMessage):responses.append({"role": "system","content": "本轮响应结束","type": "result","metadata": {"input_tokens": message.usage.get("input_tokens"),"output_tokens": message.usage.get("output_tokens"),"cost_usd": message.total_cost_usd,"duration_ms": message.duration_ms}})print({"role": "system","content": "本轮响应结束","type": "result","metadata": {"input_tokens": message.usage.get("input_tokens"),"output_tokens": message.usage.get("output_tokens"),"cost_usd": message.total_cost_usd,"duration_ms": message.duration_ms}})break  # 结束接收except Exception as e:if "another coroutine is already waiting" in str(e):print("流读取冲突:可能客户端被复用或并发调用")raiseexcept CLIConnectionError:raise Exception("无法连接到 Claude 服务,请检查网络或 API 密钥配置")except Exception as e:print(f"聊天请求失败: {e}")traceback.print_exc()raise Exception(f"内部错误: {str(e)}")finally:# 确保关闭客户端if client:try:await client.disconnect()except:pass  # 忽略关闭时的异常return responsesif __name__ == "__main__":# 生产环境建议使用 gunicorn + uvicorn 部署start_time = datetime.now()asyncio.run(chat())print(f"总耗时: {(datetime.now() - start_time).total_seconds()} 秒")

(二)重要配置

options = ClaudeCodeOptions(cwd=".",permission_mode="bypassPermissions",  # 绕过权限(!很重要,不然执行不了)mcp_servers=mcp_servers)

(三)运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95399.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95399.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95399.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse 常用搜索功能汇总

Eclipse 常用搜索功能汇总 Eclipse 提供了多种搜索功能,帮助开发者快速定位代码、文件、类、方法、API 等资源。以下是详细的使用方法和技巧。 一、常用搜索快捷键快捷键功能描述Ctrl H打开全局搜索对话框,支持文件、Java 代码、任务等多种搜索。Ctrl …

关于Spring的一些理解

Spring整体结构:Spring实际运行场景:基础 Spring启动过程 传统Spring: (1)初始化准备阶段 (2)容器创建与注入 (3)Bean工厂后置处理 (4)Bean工厂后…

Windows右下角系统托盘图标快速显示或隐藏

系统托盘指的是Windows电脑桌面右下角的区域,包括时间、wifi(网络)、音量、电源、输入法、一些程序/应用等。启动了应用后,Windows会把部分应用的图标显示或隐藏在系统托盘区。我们可以根据需要快速显示或隐藏相关应用&#xff0c…

Kotlin编程学习记录2

Kotlin编程学习记录2——条件与循环 条件语句:if 与 when ​ Kotlin 的控制流把“表达式优先”作为设计原则——if、when 不只是控制语句,都可以作为表达式使用并返回值,这影响了日常代码风格(更函数式、可组合)。笔…

印度物联网崛起:政策红利下的千亿蓝海与本土化博弈

印度物联网市场正处于快速发展阶段,2025年市场规模预计达到200亿美元,主要得益于政府"数字印度"计划和智能城市项目的推动。蜂窝物联网连接数在2024年同比增长34%,2025年Q1增速进一步提升至32%,其中智能电表部署和资产追踪应用成为核心驱动力。然而,市场也面临着…

html学习:

ok,今天准备学一下html&#xff0c;花费点时间整理一下&#xff1a; HTML标签的语法格式 HTML 中的标签就像关键字一样&#xff0c;每个标签都有自己的语义&#xff08;含义&#xff09;。 HTML 标签的语法格式 属性↓ <div class"begin">cyx</div>↑…

CRYPT32!PkiAsn1Decode函数分析的一个例子

第一部分&#xff1a; 0: kd> g Breakpoint 35 hit CRYPT32!PkiAsn1Decode: 001b:75c9af0c 55 push ebp 1: kd> kc# 00 CRYPT32!PkiAsn1Decode 01 CRYPT32!PkiAsn1DecodeAndAllocInfo 02 CRYPT32!PkiAsn1DecodeAndAllocInfoEx 03 CRYPT32!Asn1InfoDecode…

大模型蒸馏、大模型微调、RAG

前言&#xff1a; 有很多同学想学习大模型开发&#xff0c;又无从下手&#xff0c;网上一搜&#xff0c;铺天盖地的付费课程。又不想当韭菜&#xff0c;打破认知障碍&#xff0c;通过自学&#xff0c;改变自己&#xff0c;改变世界&#xff01; 一、大模型蒸馏、微调、RAG的适…

25高教社杯数模国赛【E题保姆级思路+问题分析】

注&#xff1a;本内容由”数模加油站“ 原创出品&#xff0c;虽无偿分享&#xff0c;但创作不易。 欢迎参考teach&#xff0c;但请勿抄袭、盗卖或商用。 E 题 AI辅助智能体测 《国家学生体质健康标准》的颁布&#xff0c;有效地促进了大中小学生关注自身体质健康的发展&#xf…

基于单片机车内换气温度检测空气质量检测系统Proteus仿真(含全部资料)

全套资料包含&#xff1a;Proteus仿真源文件keil C语言源程序AD原理图流程图元器件清单说明书等 资料下载&#xff1a; 通过网盘分享的文件&#xff1a;资料分享 链接: 百度网盘 请输入提取码 提取码: tgnu 目录 资料下载&#xff1a; Proteus仿真功能 项目文件资料&#…

MySQL子查询的分类讲解与实战

精选专栏链接 &#x1f517; MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅&#xff0c;点赞&#xff0b;关注&#xff0c;每日精进1%&#xff0c;与百万开发者共攀技术珠峰 更多内容持续更新中&#xff01;希望能给大家带来…

Leetcode 206. 反转链表 迭代/递归

原题链接&#xff1a;Leetcode 206. 反转链表 解法一&#xff1a;迭代 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …

C++11新特性 | 欢迎来到现代C++的世界!

左值与右值 左值与右值的概念 可以被取地址的值为左值&#xff08;left value&#xff0c;简称lvalue&#xff09;&#xff0c;否则为右值&#xff08;right value&#xff0c;简称rvalue&#xff09;。 常见的左值、右值例子&#xff1a; // >>>>>>> 左值…

因为对象装箱拆箱导致的空指针异常

今天业务突然提了个事件单&#xff0c;客户添加承租人一直报错&#xff0c;但是很奇怪&#xff0c;报错信息是空的二话不说&#xff0c;先跟API组要了接口和参数&#xff0c;然后看日志然鹅&#xff0c;这个接口并没有打印日志&#xff0c;只有一个e.printStackTrace()然后静下…

Rust 在 Windows 环境下交叉编译其他操作系统可执行文件的详细指南

前言&#xff1a;为什么需要交叉编译&#xff1f; 想象一下这样的场景&#xff1a;你在 Windows 电脑上开发了一个 Rust 程序&#xff0c;希望它能在 Linux 服务器上运行&#xff0c;或者在朋友的 macOS 电脑上测试 —— 总不能为了编译不同系统的版本&#xff0c;专门买一台 …

Ubuntu系统配置镜像源

要修改的文件 /etc/apt/sources.list操作步骤 1. 备份原文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2. 编辑文件 sudo nano /etc/apt/sources.list3. 清空文件内容&#xff0c;填入以下内容 先获取Ubuntu版本代号&#xff1a; lsb_release -cs然后根据版本填…

【Spring Cloud Alibaba】Sentinel(一)

【Spring Cloud Alibaba】Sentinel&#xff08;一&#xff09;1. 简介2. 服务雪崩1. 简介 Sentinel 是阿里巴巴开源的分布式系统的流量防护组件&#xff0c;主要用来做流量控制、熔断降级、系统保护。它的定位类似于 Hystrix&#xff0c;但更侧重在 流量治理 上。目前在微服务…

Delphi 5 操作Word表格选区问题解析

在 Delphi 5 中操作 Word 时&#xff0c;您遇到的 Selection.MoveDown 方法选中整行而不是仅移动一行的原因与 Word 的选择机制和单元格内部结构有关。以下是详细解释和解决方案&#xff1a;问题分析单元格的选区范围&#xff1a;当使用 .Cell(r, c).Select 选中单元格时&#…

小米fastboot不能被电脑识别但手机正常使用模式时能被电脑识别

小米手机USB连接电脑不识别解决方法 – MIUI历史版本 小米手机USB连接电脑不识别解决方法 问题经验 手机连接电脑通常会自动安装驱动&#xff0c;如果驱动安装失败或是电脑不能识别手机设备&#xff0c;可尝试下面方法。 1. 尝试换根 USB 数据线&#xff0c;最好是手机原…