专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
程序员小灰  ·  AGI来了,我们还需要拼命工作吗? ·  昨天  
程序猿  ·  DeepSeek创始人梁文锋实习往事:月薪1 ... ·  4 天前  
OSC开源社区  ·  字节跳动开源跨平台UI框架Lynx:一套代码 ... ·  3 天前  
51好读  ›  专栏  ›  OSC开源社区

MCP这么火,来一波简单实操记录

OSC开源社区  · 公众号  · 程序员  · 2025-03-11 16:30

正文

↓推荐关注↓



2024年底,Anthropic发布了 MCP协议 。Anthropic就是发布了Claude系列模型的公司(现在gpt基础模型不更新还退步,claude真的很棒)

除去官方的各种美化和包装,这到底是什么?我大胆说一说:这其实是另一种形式的 Function Calling


一、简单解释 Function Calling

大模型可以看作在一个 封闭的“盒子” 里,无法实时获取外部信息。为了让大模型 获取外部数据 ,我们可以提供一些“方法”,例如:

方法:获取天气
需要传入的参数:经度、纬度
返回结果:空气质量、温度、湿度...

在提问时,我们 携带一个方法列表 ,里面写着各种方法。大模型决定调用某个方法时,会输出方法名和参数;该方法在本地执行,并将结果返回给大模型。


二、快速开始

简介

模型上下文协议 (MCP) 是一种开放协议,可实现 LLM 应用与外部数据源和工具之间的无缝集成。

GitHub地址 https://github.com/modelcontextprotocol](https://github.com/modelcontextprotocol

在此处我们还是跳开这些枯燥的理论,直接上手官方案例(有条件的小伙伴可以亲自试试!)

我是Mac环境、Python语言(TS也支持)

(一)安装包管理器 - uv

执行以下命令安装 uv:

curl -LsSf https://astral.sh/uv/install.sh | sh

提示: 安装后需重启终端。如果环境变量写入失败,手动修改 ~/.zshrc

export PATH="$HOME/.local/bin:$PATH"

吐槽: 官方居然选了个刚发布不久的依赖管理工具 uv,坑点一堆。我后续探索下给换成poetry版本的吧

(二)初始化项目

以下是完整步骤:

# 创建项目
uv init weather
cd weather

# 创建虚拟环境
uv venv
source .venv/bin/activate

# 安装依赖
uv add mcp httpx

# 删除示例文件
rm hello.py

# 创建文件
mkdir -p src/weather
touch src/weather/__init__.py
touch src/weather/server.py

(三)编写代码

1. 修改 pyproject.toml

pyproject.toml 尾部添加以下内容:

[build-system]
requires = [ "hatchling",]
build-backend = "hatchling.build"

[project.scripts]
weather = "weather:main"

2. 编写 __init__.py

文件路径: src/weather/__init__.py

from . import server
import asyncio

def main():
    """Main entry point for the package."""
    asyncio.run(server.main())

# Optionally expose other important items at package level
__all__ = ['main''server']

3. 编写 server.py

文件路径: src/weather/server.py

from typing import Any
import asyncio
import httpx
from mcp.server.models import InitializationOptions
import mcp.types as types
from mcp.server import NotificationOptions, Server
import mcp.server.stdio

NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"

server = Server("weather")

@server.list_tools()
asyncdef handle_list_tools() -> list[types.Tool]:
    return [
        types.Tool(
            name="get-alerts",
            description="Get weather alerts for a state",
            inputSchema={
                "type""object",
                "properties"






请到「今天看啥」查看全文