Skip to main content
Glama
README.md
# GGB Web MCP

GeoGebra MCP 服务器 - 通过 Model Context Protocol 让 AI 与 GeoGebra 数学可视化软件交互。

## 功能特性

- **MCP 协议支持** - 完整的 Model Context Protocol 实现,支持 stdio 和 HTTP/SSE 两种传输方式
- **实时 Web 可视化** - 内置 Web 服务器,通过浏览器实时查看数学构造
- **丰富的数学工具** - 25+ GeoGebra 工具,涵盖几何、函数、代数运算
- **教育模板** - 预置教育场景模板,快速创建课堂演示
- **多实例协调** - 智能锁文件机制,多个 MCP 实例共享同一 Web 服务器

## 快速开始

### 1. 安装依赖

```bash
git clone git@github.com:kms9/ggb-web-mcp.git
cd ggb-web-mcp
npm install
```

### 2. 构建项目

```bash
npm run build
```

### 3. 启动服务

```bash
npm start
```

服务启动后:
- **MCP 服务器**: 通过 stdin/stdout 与 AI 客户端通信
- **Web 可视化**: 访问 http://localhost:3000 查看实时数学构造

## 配置 AI 客户端

### Claude Desktop

编辑 `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "geogebra": {
      "command": "node",
      "args": ["/path/to/ggb-web-mcp/dist/cli.js"]
    }
  }
}
```

### Cursor IDE

在 Cursor 设置中添加 MCP 服务器配置:

```json
{
  "mcp": {
    "servers": {
      "geogebra": {
        "command": "node",
        "args": ["/path/to/ggb-web-mcp/dist/cli.js"]
      }
    }
  }
}
```

## CLI 命令

```bash
# 启动 MCP 服务器
npm start

# 开发模式(热重载)
npm run dev

# 查看帮助
node dist/cli.js --help

# 设置日志级别
node dist/cli.js --log-level debug

# 指定端口
node dist/cli.js --port 3001
```

### 命令行参数

| 参数 | 说明 | 默认值 |
|------|------|--------|
| `-h, --help` | 显示帮助信息 | - |
| `-v, --version` | 显示版本号 | - |
| `--log-level` | 日志级别 (error, warn, info, debug) | info |
| `--port` | Web 服务器端口 | 3000 |

## HTTP API 端点

Web 服务器提供以下 HTTP API:

### MCP 端点

| 端点 | 方法 | 说明 |
|------|------|------|
| `/mcp/sse` | GET | SSE 连接,接收服务器推送消息 |
| `/mcp/message` | POST | 发送 JSON-RPC 请求 |
| `/mcp/tools` | GET | 获取可用工具列表 |
| `/mcp/tools/:name` | POST | 执行指定工具 |
| `/mcp/info` | GET | 获取服务器信息 |

### GeoGebra API

| 端点 | 方法 | 说明 |
|------|------|------|
| `/api/geogebra/state` | GET | 获取当前构造状态 |
| `/api/geogebra/clear` | POST | 清空当前构造 |
| `/api/geogebra/command` | POST | 执行 GeoGebra 命令 |

### 示例请求

```bash
# 获取工具列表
curl http://localhost:3000/mcp/tools

# 创建一个点
curl -X POST http://localhost:3000/mcp/tools/geogebra_create_point \
  -H "Content-Type: application/json" \
  -d '{"name": "A", "x": 1, "y": 2}'

# 执行 GeoGebra 命令
curl -X POST http://localhost:3000/api/geogebra/command \
  -H "Content-Type: application/json" \
  -d '{"command": "Circle(A, 3)"}'
```

## 可用工具

### 基础工具

| 工具名 | 说明 |
|--------|------|
| `geogebra_eval_command` | 执行任意 GeoGebra 命令 |
| `geogebra_get_objects` | 获取所有对象信息 |
| `geogebra_clear_construction` | 清空当前构造 |
| `geogebra_export_png` | 导出 PNG 图片 |
| `geogebra_export_svg` | 导出 SVG 图片 |

### 几何工具

| 工具名 | 说明 |
|--------|------|
| `geogebra_create_point` | 创建点 |
| `geogebra_create_line` | 创建直线(两点)|
| `geogebra_create_line_equation` | 创建直线(方程)|
| `geogebra_create_circle` | 创建圆 |
| `geogebra_create_polygon` | 创建多边形 |

### 函数工具

| 工具名 | 说明 |
|--------|------|
| `geogebra_plot_function` | 绘制函数图像 |
| `geogebra_plot_parametric` | 绘制参数方程 |
| `geogebra_plot_implicit` | 绘制隐函数 |
| `geogebra_plot_inequality` | 绘制不等式区域 |

### 代数工具

| 工具名 | 说明 |
|--------|------|
| `geogebra_solve_equation` | 求解方程 |
| `geogebra_solve_system` | 求解方程组 |
| `geogebra_simplify` | 化简表达式 |
| `geogebra_expand` | 展开表达式 |
| `geogebra_factor` | 因式分解 |
| `geogebra_derivative` | 求导数 |
| `geogebra_integral` | 求积分 |

### 动画工具

| 工具名 | 说明 |
|--------|------|
| `geogebra_create_slider` | 创建滑块 |
| `geogebra_animate_slider` | 启动/停止动画 |
| `geogebra_set_animation_speed` | 设置动画速度 |

### 教育工具

| 工具名 | 说明 |
|--------|------|
| `geogebra_list_educational_templates` | 列出教育模板 |
| `geogebra_create_from_template` | 从模板创建构造 |

## 环境配置

创建 `.env` 文件(可选):

```env
# 服务器配置
PORT=3000
LOG_LEVEL=info
NODE_ENV=development

# GeoGebra 配置
GEOGEBRA_APP_NAME=classic
GEOGEBRA_WIDTH=800
GEOGEBRA_HEIGHT=600
GEOGEBRA_HEADLESS=true

# 性能配置
INSTANCE_POOL_SIZE=2
RESPONSE_TIMEOUT=30000
```

### 配置说明

| 变量 | 说明 | 默认值 |
|------|------|--------|
| `PORT` | Web 服务器端口 | 3000 |
| `LOG_LEVEL` | 日志级别 | info |
| `GEOGEBRA_HEADLESS` | 无头模式(不显示浏览器窗口)| true |
| `INSTANCE_POOL_SIZE` | GeoGebra 实例池大小 | 2 |

## 开发指南

### 项目结构

```
ggb-web-mcp/
├── src/
│   ├── cli.ts              # CLI 入口
│   ├── index.ts            # 主入口
│   ├── server.ts           # MCP 服务器
│   ├── tools/              # 工具定义
│   │   ├── geogebra-tools.ts
│   │   ├── educational-templates.ts
│   │   └── performance-tools.ts
│   ├── types/              # 类型定义
│   ├── utils/              # 工具函数
│   └── web/                # Web 服务器
│       └── server.ts
├── tests/                  # 测试文件
├── examples/               # 使用示例
└── docs/                   # 文档
```

### 常用脚本

```bash
# 开发模式
npm run dev

# 构建
npm run build

# 运行测试
npm test

# 测试覆盖率
npm run test:coverage

# 代码检查
npm run lint

# 清理构建产物
npm run clean
```

### 添加新工具

1. 在 `src/tools/geogebra-tools.ts` 中定义工具:

```typescript
{
  tool: {
    name: 'geogebra_my_tool',
    description: '工具描述',
    inputSchema: {
      type: 'object',
      properties: {
        param1: { type: 'string', description: '参数说明' }
      },
      required: ['param1']
    }
  },
  handler: async (params) => {
    // 实现逻辑
    return {
      content: [{ type: 'text', text: JSON.stringify(result) }]
    };
  }
}
```

2. 工具会自动注册到工具注册表中

## 系统要求

- Node.js >= 18.0.0
- npm 或 yarn

## 许可证

MIT License

## 相关链接

- [Model Context Protocol](https://modelcontextprotocol.io/)
- [GeoGebra](https://www.geogebra.org/)
- [GeoGebra Apps API](https://geogebra.github.io/docs/reference/en/GeoGebra_Apps_API/)