面向纯新手:Mac 环境、零命令行恐惧、全程截图、傻瓜式复制粘贴。


0. 先秀成果

  1. 本地 LM Studio 里用 Llama3.1-8B 对话。

  2. Cursor 侧边栏点亮绿色 MCP 图标 → 自然语言让大模型「帮我查今天的深圳天气」→ 返回实时数据。
    让读者先看到「原来真能跑起来」,再决定要不要往下看。


1. 环境总览(表格一行就够)

工具

用途

是否开源

本教程最低配置

Ollama

启动本地 GGUF 模型

✅

8G 内存

LM Studio

带 GUI 的模型启动器

❌ 免费

8G 内存

Cursor

支持 MCP 的编辑器

❌ 免费

任意

uv

零依赖 Python 启动器

✅

任意


2. 路线 A:Ollama 命令行 3 步走(带截图)

Ollama: https://ollama.com/

2.1 安装(30 秒)

# Homebrew 一条命令
brew install --cask ollama

官方文档截图:官网下载页 → 复制命令 → 终端回车 → 出现羊驼图标即成功。

2.2 拉模型(2 分钟)

ollama pull llama3.1:8b      # 4.7 GB
ollama run  llama3.1:8b      # 直接对话

⚠️ 国内网络:提前 export OLLAMA_HOST=0.0.0.0:11434 可局域网访问

。

2.3 可选 WebUI(1 命令)

docker run -d -p 3000:8080 --name ollama-webui --env OLLAMA_API_BASE_URL=http://host.docker.internal:11434 ghcr.io/ollama-webui/ollama-webui:main

浏览器打开 localhost:3000 即可 ChatGPT 同款界面

。


3. 路线 B:LM Studio 纯点点点(带截图)

LM Studio: https://lmstudio.ai/

3.1 安装

官网 dmg 拖进 Applications → 首次打开会提示下载第一个模型,点 Skip 跳过。

3.2 搜索 & 下载

左侧放大镜 → 输入 llama3.1 → 绿色标签=跑得动,红色=跑不动 → Download。

3.3 加载对话

上方「Model」下拉框 → 选择刚下载的模型 → 右侧 Chat 标签 → 输入「讲个笑话」→ 看到回复即成功。

3.4 小技巧

  • 改中文:右下角齿轮 → Language → 简体中文。

改模型保存路径:Settings → Models → Browse,别让 C 盘爆炸。


4. 什么是 MCP?一句话看懂

模型上下文协议(MCP)=「让大模型直接调用外部 API」的通用 USB 接口。
今天我们要写一个「天气查询 USB」,插到 Cursor 里,说话就能查天气。


5. 5 分钟搭一个 MCP 服务(Python 版)

5.1 安装 uv(10 秒)

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

5.2 初始化项目(20 秒)

uv init weather-mcp && cd weather-mcp
uv venv && source .venv/bin/activate
uv add fastmcp httpx

5.3 写代码(main.py,复制即可)

from fastmcp import FastMCP
import httpx, os

app = FastMCP("weather")

@app.tool()
async def get_weather(city: str) -> str:
    key = os.getenv("AMAP_KEY")           # 高德天气 key
    url = f"https://restapi.amap.com/v3/weather/weatherInfo?city={city}&key={key}"
    r = httpx.get(url, timeout=10)
    return r.json()["lives"][0]["weather"]

一行启动:

uv run main.py

看到 stdio server started 即 OK。


6. 把 MCP 插进 Cursor(30 秒)

6.1 打开配置

Cursor → Settings → MCP → + Add → 选 Stdio → 填写:

字段

值

Command

uv

Arguments

run main.py

Env

AMAP_KEY=你刚申请的高德 key

保存后侧边栏出现绿色小圆点 = 连通。

6.2 测试

新建聊天 → 输入「深圳现在天气如何?」→ 模型自动调用工具 → 返回「晴 28℃」。截图放这里。


7. 更多现成 MCP 仓库(直接 git clone 就能玩)

场景

仓库地址

启动命令示例

小红书自动发文

https://github.com/xpzouying/xiaohongshu-mcp

go run .

反转字符串 C#

https://github.com/liaokongVFX/MCP-Chinese-Getting-Started-Guide

dotnet run


8. 常见坑速查表(放折叠 FAQ)

  • 绿灯不亮 → 看 Cursor 控制台日志,99% 是路径/环境变量写错。

  • 模型加载慢 → LM Studio 设置 → GPU 层数调低;Ollama 加 OLLAMA_FLASH_ATTENTION=1。

  • 国内下载不动 → LM Studio 设置 → Hugging Face 代理打开;Ollama 用代理命令 HTTPS_PROXY=http://127.0.0.1:7890 ollama pull xxx。


9. 一键复盘(Checklist 海报)

✅ 安装 Ollama 或 LM Studio
✅ 跑通 llama3.1:8b 对话
✅ uv 创建 weather-mcp
✅ Cursor 点亮绿灯
✅ 自然语言查天气成功

全部打钩?恭喜,你已经是「会部署本地大模型 + 写 MCP 服务」的那 1% 的人了


10. 进阶实验:本地小模型 + Chrome MCP 做信息采集 Agent

在上面的基础上,我又做了一个进阶实验:用 LM Studio 部署的本地小模型(qwen3-4b)加 chrome-devtools-mcp,实现“命令行一句话 → 浏览器检索 X 平台 → 汇总成报告”。下面是当时交给 AI 编码工具的需求提示词,可以作为同类需求的模板(整理自原《AICoding:本地LLM+MCP编写Agent完成数据爬取》,已合并到本节)。

为什么不直接用 OpenClaw?通用 Agent 搭配本地小模型效果差、跑不动,换云端订阅额度又不够用;写成 Skill 虽然也能实现,但没必要。所以改成专用流程:浏览器操作交给 MCP,本地模型只负责总结和打标分类。

## 目标
我期望实现我通过命令行调用对话能力时,可以根据我的对话完成数据查询和总结,汇总成一份报告给我。

### 使用实例
python3 main.py "总结近三天的openclaw信息,汇总后发给我"

### 流程
接收到文字信息,通过chrome访问https://x.com/home,然后通过页面搜索相关信息,先整体出所有符合要求的发言,然后将其类似:https://x.com/lipeng0820/status/2039981870184865839 链接进行保存,然后汇总出列表后,访问每一个连接,将其作者发表的信息和评论都获取总结到本地目录,通过md形式+附件的形式存储到本地,md中包含作者全部内容和评论全部内容,当所有文章都处理已完毕后,继续处理下一篇文章。当所有文章处理完毕后,分别对每一篇文章进行总结核心观点,然后将所有满足条件内容汇总给llm,进行打标分类,然后给出汇总结果,以md表格形式给出。

### 技术栈要求
1. 使用python完成
2. 使用本地模型(需要支持配置,放到文件扩展中)
3. 使用mcp连接本地浏览器(需要支持配置,放到文件扩展中)

### 本地模型说明 
如下是通过curl调用本地模型,本地模型是通过 LM-Studio 部署的
```bash
curl http://localhost:1234/api/v1/chat \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen/qwen3-4b-2507",
    "system_prompt": "You answer only in rhymes.",
    "input": "What is your favorite color?"
}'
```

### Chrome MCP连接方式
```json
{
  "mcpServers": {
    "chrome-devtools": {
      "command": "npx",
      "args": [
        "chrome-devtools-mcp@latest",
        "--autoConnect"
      ]
    }
  }
}
```

## 注意事项
1. 因为浏览器连接的是当前已经打开的浏览器,所以需要确认连接按钮点击,我期望将程序分割开,后台永远运行和chrome连接的服务,通过中转服务完成调用,这样就不用频繁确认。