Claude Code SDK 配置Gitlab MCP服務

一、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;最好是手機原…