langchain-ai/langsmith-mcp-server

GitHub: langchain-ai/langsmith-mcp-server

一个将 LangSmith 可观测性平台与 MCP 客户端无缝集成的服务器,使语言模型能够直接查询对话历史、Prompts、Traces、数据集及账单等数据。

Stars: 127 | Forks: 39

# 🦜🛠️ LangSmith MCP Server [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Python 3.10](https://img.shields.io/badge/python-3.10-blue.svg)](https://www.python.org/downloads/release/python-3100/) 一个生产就绪的 [Model Context Protocol](https://modelcontextprotocol.io/introduction) (MCP) server,提供与 [LangSmith](https://smith.langchain.com) 可观测性平台的无缝集成。该 server 使语言模型能够从 LangSmith 获取对话历史、prompts、runs 和 traces、数据集、实验以及账单使用情况。 ## 📋 示例用例 该 server 提供了强大的功能,包括: - 💬 **对话历史**:“从项目 'my-chatbot' 的线程 'thread-123' 中获取我的对话历史”(按字符预算进行分页) - 📚 **Prompt 管理**:“获取我工作区中的所有公开 prompts” / “拉取 'legal-case-summarizer' prompt 的模板” - 🔍 **Traces 与 Runs**:“获取项目 'alpha' 中最近的 10 次根 runs” / “获取 trace <uuid> 的所有 runs(第 2 页,共 5 页)” - 📊 **数据集**:“列出 chat 类型的数据集” / “读取数据集 'customer-support-qa' 中的示例” - 🧪 **实验**:“列出数据集 'my-eval-set' 的实验及其延迟和成本指标” - 📈 **账单**:“获取 2025 年 9 月的账单使用情况” ## 🚀 快速开始 LangSmith MCP Server 的**托管版本**支持通过 HTTP-streamable 传输使用,因此您无需自行运行 server 即可连接: - **URL:** `https://langsmith-mcp-server.onrender.com/mcp` - **托管:** [Render](https://render.com),使用该项目的 Dockerfile 从此公共仓库构建。 像使用任何 HTTP-streamable MCP server 一样使用它:将您的客户端指向该 URL,并在 `LANGSMITH-API-KEY` header 中发送您的 LangSmith API 密钥。无需本地安装或 Docker。 **示例(Cursor `mcp.json`):** ``` { "mcpServers": { "LangSmith MCP (Hosted)": { "url": "https://langsmith-mcp-server.onrender.com/mcp", "headers": { "LANGSMITH-API-KEY": "lsv2_pt_your_api_key_here" } } } } ``` 可选 headers:`LANGSMITH-WORKSPACE-ID`、`LANGSMITH-ENDPOINT`(与下方 [Docker 部署](#-docker-deployment-http-streamable)章节中的相同)。 ## 🛠️ 可用工具 LangSmith MCP Server 提供以下工具用于与 LangSmith 集成。 ### 📚 Prompt 管理 | 工具名称 | 描述 | |-----------|-------------| | `list_prompts` | 从 LangSmith 获取 prompts,支持按可见性(公开/私有)和限制进行可选过滤。 | | `get_prompt_by_name` | 通过确切名称获取特定 prompt,返回 prompt 详情和模板。 | | `push_prompt` | 仅作文档说明:如何创建并将 prompts 推送到 LangSmith。 | ### 🔍 Traces 与 Runs | 工具名称 | 描述 | |-----------|-------------| | `fetch_runs` | 从一个或多个项目中获取 LangSmith runs(traces、tools、chains 等)。支持过滤器(run_type、error、is_root)、FQL(`filter`、`trace_filter`、`tree_filter`)和排序。设置 `trace_id` 时,返回**基于字符分页**的页面;否则返回最多达 `limit` 的一批数据。请始终传递 `limit` 和 `page_number`。 | | `list_projects` | 列出 LangSmith 项目,支持按名称、数据集和详细程度(简化版 vs 完整版)进行可选过滤。 | ### 📊 数据集与示例 | 工具名称 | 描述 | |-----------|-------------| | `list_datasets` | 获取数据集,支持按 ID、类型、名称、名称子字符串或元数据进行过滤。 | | `list_examples` | 通过数据集 ID/名称或示例 ID 从数据集中获取示例,支持过滤、元数据、splits 以及可选的 `as_of` 版本。 | | `read_dataset` | 通过 ID 或名称读取单个数据集。 | | `read_example` | 通过 ID 读取单个示例,支持可选的 `as_of` 版本。 | | `create_dataset` | 仅作文档说明:如何在 LangSmith 中创建数据集。 | | `update_examples` | 仅作文档说明:如何在 LangSmith 中更新数据集示例。 | ### 🧪 实验与评估 | 工具名称 | 描述 | |-----------|-------------| | `list_experiments` | 列出数据集的实验项目(参考项目)。需要 `reference_dataset_id` 或 `reference_dataset_name`。返回关键指标(延迟、成本、反馈统计)。 | | `run_experiment` | 仅作文档说明:如何在 LangSmith 中运行实验和评估。 | ### 📈 使用量与账单 | 工具名称 | 描述 | |-----------|-------------| | `get_billing_usage` | 获取指定日期范围内的组织账单使用情况(例如 trace 计数)。支持可选的工作区过滤;返回指标并内联工作区名称。 | ### 📄 分页(基于字符) 多个工具使用**无状态、字符预算分页**机制,以确保响应保持在大小限制内,并与 LLM 客户端良好配合: - **应用场景:** `get_thread_history` 和 `fetch_runs`(当设置了 `trace_id` 时)。 - **参数:** 每次请求都要发送 `page_number`(从 1 开始)。可选项:`max_chars_per_page`(默认 25000,上限 30000)和 `preview_chars`(使用 "… (+N chars)" 截断长字符串)。 - **响应:** 每个响应包含 `page_number`、`total_pages` 和页面 payload(消息对应 `result`,runs 对应 `runs`)。要获取更多内容,请再次调用并设置 `page_number = 2`,然后是 `3`,直到 `total_pages`。 - **优势:** 页面是基于 JSON 字符数构建的,而不是项目数量,因此每页都适合固定的大小。无需游标或服务端状态——只需整数页码。 ## 🛠️ 安装选项 ### 📝 常规前置条件 1. 安装 [uv](https://github.com/astral-sh/uv)(一个快速的 Python 包安装和解析工具): curl -LsSf https://astral.sh/uv/install.sh | sh 2. 克隆此仓库并导航至项目目录: git clone https://github.com/langchain-ai/langsmith-mcp-server.git cd langsmith-mcp-server ### 🔌 MCP 客户端集成 安装好 LangSmith MCP Server 后,您可以将其与各种兼容 MCP 的客户端集成。您有两种安装选项: #### 📦 从 PyPI 安装 1. 安装该包: uv run pip install --upgrade langsmith-mcp-server 2. 添加到您的客户端 MCP 配置中: { "mcpServers": { "LangSmith API MCP Server": { "command": "/path/to/uvx", "args": [ "langsmith-mcp-server" ], "env": { "LANGSMITH_API_KEY": "your_langsmith_api_key", "LANGSMITH_WORKSPACE_ID": "your_workspace_id", "LANGSMITH_ENDPOINT": "https://api.smith.langchain.com" } } } } #### ⚙️ 从源码安装 将以下配置添加到您的 MCP 客户端设置中(在**项目根目录**下运行,以便找到该包): ``` { "mcpServers": { "LangSmith API MCP Server": { "command": "/path/to/uv", "args": [ "--directory", "/path/to/langsmith-mcp-server", "run", "langsmith_mcp_server/server.py" ], "env": { "LANGSMITH_API_KEY": "your_langsmith_api_key", "LANGSMITH_WORKSPACE_ID": "your_workspace_id", "LANGSMITH_ENDPOINT": "https://api.smith.langchain.com" } } } } ``` 替换以下占位符: - `/path/to/uv`:您的 uv 安装路径的绝对路径(例如 `/Users/username/.local/bin/uv`)。您可以使用 `which uv` 找到它。 - `/path/to/langsmith-mcp-server`:**项目根目录**的绝对路径(即包含 `pyproject.toml` 和 `langsmith_mcp_server/` 的目录)。 - `your_langsmith_api_key`:您的 LangSmith API 密钥(必填)。 - `your_workspace_id`:您的 LangSmith 工作区 ID(可选,适用于分配给多个工作区的 API 密钥)。 - `https://api.smith.langchain.com`:LangSmith API endpoint(可选,默认为标准 endpoint)。 配置示例(PyPI/uvx): ``` { "mcpServers": { "LangSmith API MCP Server": { "command": "/path/to/uvx", "args": ["langsmith-mcp-server"], "env": { "LANGSMITH_API_KEY": "lsv2_pt_your_key_here", "LANGSMITH_WORKSPACE_ID": "your_workspace_id", "LANGSMITH_ENDPOINT": "https://api.smith.langchain.com" } } } } ``` 将此配置复制到 Cursor → MCP Settings 中(将 `/path/to/uvx` 替换为 `which uvx` 的输出结果)。 ![LangSmith Cursor 集成](https://raw.githubusercontent.com/langchain-ai/langsmith-mcp-server/main/docs/assets/cursor_mcp.png) ### 🔧 Headers(工具调用) 通过 **HTTP**(例如 streamable HTTP 或托管的 MCP endpoint)连接时,server 使用 **headers** 进行身份验证和配置。您的 MCP 客户端必须在每次请求时发送这些 headers;工具调用不需要环境变量。 | Header | 必填 | 描述 | |--------|----------|-------------| | `LANGSMITH-API-KEY` | ✅ 是 | 用于工具调用(列出 prompts、获取 runs 等)的 LangSmith API 密钥 | | `LANGSMITH-WORKSPACE-ID` | ❌ 否 | 适用于分配给多个工作区的 API 密钥的工作区 ID | | `LANGSMITH-ENDPOINT` | ❌ 否 | 自定义 API endpoint URL(适用于自托管或欧盟区域) | 仅在启用 [server 监控](#optional-tool-call-monitoring-to-a-second-langsmith-instance)时使用的可选 headers(用于按会话对 traces 进行分组): | Header | 描述 | |--------|-------------| | `mcp-session-id` | 会话或线程 ID;作为 `session_id` 存储在 trace 元数据中 | | `x-session-id` | 如果未设置 `mcp-session-id`,则使用此项作为后备 | | `x-request-id` | 用于请求范围分组的后备选项 | **Stdio 传输:** 通过 stdio 运行 server 时(例如 `uvx langsmith-mcp-server`),没有 headers。server 会回退到进程环境变量中的 `LANGSMITH_API_KEY`、`LANGSMITH_WORKSPACE_ID` 和 `LANGSMITH_ENDPOINT`,以确保工具调用仍然有效。 ### 🔧 环境变量 使用 HTTP 时,环境变量**不**用于工具调用(而是使用 headers)。它们用于: 1. **Stdio 传输** —— 在没有 headers 时的凭据后备(见上文)。 2. **负载测试** —— 例如 `tests/load_test_sessions.py` 会从环境(或项目根目录下的 `.env` 文件)中读取 `LANGSMITH_API_KEY`。 3. **可选的 server 监控** —— 将工具调用 tracing 到第二个 LangSmith 实例(见下文)。 | 变量 | 用途 | 描述 | |----------|----------|-------------| | `LANGSMITH_API_KEY` | Stdio 后备,负载测试 | LangSmith API 密钥(未通过 headers 提供时使用) | | `LANGSMITH_WORKSPACE_ID` | Stdio 后备 | 工作区 ID(可选) | | `LANGSMITH_ENDPOINT` | Stdio 后备 | 自定义 endpoint URL(可选) | #### 可选:将工具调用监控发送到第二个 LangSmith 实例 | 变量 | 必填 | 描述 | |----------|----------|-------------| | `LANGSMITH_MONITORING_API_KEY` | 是(启用时) | 用于监控的 LangSmith 实例的 API 密钥 | | `LANGSMITH_MONITORING_ENDPOINT` | 否 | Endpoint URL(默认:云端) | | `LANGSMITH_MONITORING_WORKSPACE_ID` | 否 | 监控实例的工作区 ID | | `LANGSMITH_MONITORING_PROJECT` | 否 | 监控 traces 的项目名称(默认:`mcp-server-monitoring`) | | `LANGSMITH_TRACING` | 是(发送 traces 时) | 设置为 `true` 以便将 traces 发送到 LangSmith([自定义插桩](https://docs.smith.langchain.com)) | 每次工具运行都会以 `run_type="tool"` 以及元数据中的 **session_id**(使用 HTTP 时来自 `mcp-session-id`、`x-session-id` 或 `x-request-id` header,或按请求生成)进行 trace。 如果您使用**托管版** LangSmith MCP Server,匿名的使用情况数据将被发送到单独的 LangSmith 项目中,以便我们不断迭代和改进产品。 ## 🐳 Docker 部署 (HTTP-Streamable) LangSmith MCP Server 可以使用 Docker 部署为 HTTP server,从而通过 HTTP-streamable 协议进行远程访问。 ### 构建 Docker 镜像 ``` docker build -t langsmith-mcp-server . ``` ### 使用 Docker 运行 ``` docker run -p 8000:8000 langsmith-mcp-server ``` 连接时通过 `LANGSMITH-API-KEY` header 提供 API 密钥,因此 HTTP-streamable 协议不需要环境变量。 ### 使用 HTTP-Streamable 协议连接 Docker 容器运行后,您可以使用 HTTP-streamable 传输连接到它。该 server 接受通过 headers 进行的身份验证: **必填 header:** - `LANGSMITH-API-KEY`:您的 LangSmith API 密钥 **可选 headers:** -LANGSMITH-WORKSPACE-ID`:适用于分配给多个工作区的 API 密钥的工作区 ID - `LANGSMITH-ENDPOINT`:自定义 endpoint URL(适用于自托管或欧盟区域) **客户端配置示例:** ``` from mcp import ClientSession from mcp.client.streamable_http import streamablehttp_client headers = { "LANGSMITH-API-KEY": "lsv2_pt_your_api_key_here", # Optional: # "LANGSMITH-WORKSPACE-ID": "your_workspace_id", # "LANGSMITH-ENDPOINT": "https://api.smith.langchain.com", } async with streamablehttp_client("http://localhost:8000/mcp", headers=headers) as (read, write, _): async with ClientSession(read, write) as session: await session.initialize() # Use the session to call tools, list prompts, etc. ``` ### Cursor 集成 要使用 HTTP-streamable 协议将 LangSmith MCP Server 添加到 Cursor,请将以下内容添加到您的 `mcp.json` 配置文件中: ``` { "mcpServers": { "HTTP-Streamable LangSmith MCP Server": { "url": "http://localhost:8000/mcp", "headers": { "LANGSMITH-API-KEY": "lsv2_pt_your_api_key_here" } } } } ``` **可选 headers:** ``` { "mcpServers": { "HTTP-Streamable LangSmith MCP Server": { "url": "http://localhost:8000/mcp", "headers": { "LANGSMITH-API-KEY": "lsv2_pt_your_api_key_here", "LANGSMITH-WORKSPACE-ID": "your_workspace_id", "LANGSMITH-ENDPOINT": "https://api.smith.langchain.com" } } } } ``` 在将 Cursor 连接到服务器之前,请确保服务器正在运行。 ### 健康检查 该 server 提供一个健康检查 endpoint: ``` curl http://localhost:8000/health ``` 此 endpoint 不需要身份验证,并在服务器健康时返回 `"LangSmith MCP server is running"`。 ### 前置条件 - **Python** 3.10+(推荐 3.11+) - **[uv](https://docs.astral.sh/uv/)** —— 使用 `curl -LsSf https://astral.sh/uv/install.sh | sh` 安装 - **LangSmith API 密钥** —— 获取自 [smith.langchain.com](https://smith.langchain.com) - **Node.js**(可选)—— 仅当您想使用 [MCP Inspector](https://github.com/modelcontextprotocol/inspector) 测试 server(stdio 或 streamable-http)时需要 ### 设置 ``` git clone https://github.com/langchain-ai/langsmith-mcp-server.git cd langsmith-mcp-server uv sync # Install dependencies uv sync --group test # Include test dependencies (pytest, ruff, mypy) uvx langsmith-mcp-server # Verify CLI runs (stdio) ``` ### 开发工作流 1. 在 `langsmith_mcp_server/` 或 `tests/` 中**编辑代码**。 2. **格式化和 lint**(提交前必须执行): make format make lint 3. **运行测试**: make test # 或单个文件: make test TEST_FILE=tests/tools/test_dataset_tools.py 4. **类型检查**(可选):`uv run mypy langsmith_mcp_server/` ### 使用 MCP Inspector 进行测试 您可以使用 [MCP Inspector](https://github.com/modelcontextprotocol/inspector) 通过 **stdio** 或 **streamable-http** 测试 server。 1. **启动 MCP Inspector:** npx @modelcontextprotocol/inspector@latest 在浏览器中打开 **http://localhost:6274**。 2. 在 Inspector 中**连接**: - **Stdio:** 选择 stdio 传输并配置 server 命令(例如 `uv run langsmith-mcp-server`),并在环境中设置 `LANGSMITH_API_KEY`。 - **Streamable HTTP:** 首先启动 server(`uv run uvicorn langsmith_mcp_server.server:app --host 0.0.0.0 --port 8000` 或 Docker),然后选择 streamable-http,URL 为 **`http://localhost:8000/mcp`**,并添加 header **`LANGSMITH-API-KEY`** = 您的 API 密钥。 ### 负载测试 **基于会话的**负载测试会打开许多 MCP 会话,并在每个会话中调用 `list_prompts` 工具,使用 [langchain-mcp-adapters](https://github.com/langchain-ai/langchain-mcp-adapters)。从 CLI 运行(无 UI)。必须先运行 server。 ``` uv sync --group load # Terminal 1:启动 server uv run uvicorn langsmith_mcp_server.server:app --host 0.0.0.0 --port 8000 # Terminal 2:运行 load test uv run python tests/load_test_sessions.py --sessions 20 --calls-per-session 3 ``` **选项** | 选项 | 默认值 | 描述 | |--------|---------|-------------| | `--url` | `http://localhost:8000/mcp` | MCP endpoint URL | | `--api-key` | 取自 `.env` | `LANGSMITH_API_KEY`(或在项目根目录 `.env` 中设置) | | `--sessions` | 10 | 并发会话数 | | `--calls-per-session` | 3 | 每个会话的 `list_prompts` 调用次数 | | `--debug` | 关闭 | 打印逐步日志和首次错误回溯信息 | | `--report` PATH | — | 运行后写入报告(见下文) | **报告** 使用 `--report PATH` 在测试后写入 JSON 报告(例如 `--report load_test_report` 会创建 `load_test_report.json`,包含配置、摘要、每个会话的结果以及首次错误)。 ``` uv run python tests/load_test_sessions.py --sessions 5 --report load_test_report # 创建:load_test_report.json(在当前目录) ``` ## 📄 许可证 本项目基于 MIT 许可证分发。有关详细的条款和条件,请参阅 LICENSE 文件。 由 [LangChain](https://langchain.com) 团队用 ❤️ 制作
标签:API集成, DLL 劫持, MCP服务, SOC Prime, 人工智能, 可观测性, 大语言模型, 开发工具, 用户模式Hook绕过, 请求拦截, 逆向工具