1.md•4.94 kB
## 重要文件
- **cursor.ts** 是一个配置脚本,用于生成或更新客户端配置文件
- **.cursor/mcp.json**是Cursor编辑器的配置文件,定义了MCP服务器的启动方式
- **claude_desktop_config.json**是Claude Desktop的配置文件,有类似的结构
```json
{
"mcpServers": {
"hashkey-mcp": {
"command": "npx",
"args": ["hashkey-mcp@latest"],
"env": {
"COINBASE_API_KEY_NAME": "your_api_key_name",
"COINBASE_API_PRIVATE_KEY": "your_private_key",
"SEED_PHRASE": "your seed phrase here",
"COINBASE_PROJECT_ID": "your_project_id",
"ALCHEMY_API_KEY": "your_alchemy_api_key",
"OPENROUTER_API_KEY": "your_openrouter_api_key"
},
"disabled": false,
"autoApprove": []
}
}
}
```
# @modelcontextprotocol/sdk 使用
1. Server 类
```TypeScript
// 从 SDK 导入 Server 类
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
// 创建服务器实例
const server = new Server(
{
name: 'Base MCP Server',
version, // 服务器版本
},
{
capabilities: {
tools: {}, // 服务器支持的工具
},
}
);
```
2. 传输层接口 (Transport)
```TypeScript
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
// 创建传输层
const transport = new StdioServerTransport();
// 连接服务器到传输层
await server.connect(transport);
```
3. 请求处理器
```TypeScript
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from '@modelcontextprotocol/sdk/types.js';
// 列出工具的处理器
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [...tools], // 返回服务器支持的工具列表
};
});
// 调用工具的处理器
server.setRequestHandler(CallToolRequestSchema, async (request) => {
// 处理工具调用请求
const result = await toolHandler(request.params.name, request.params.arguments);
return {
content: [
{
type: 'text',
text: result,
},
],
};
});
```
4. 工具定义
```TypeScript
// 工具类型定义
type Tool = {
name: string; // 工具名称
description: string; // 工具描述
inputSchema: object; // 输入参数的 JSON Schema
};
// 在 Base MCP 中的实现
const myTool = generateTool({
name: 'tool_name',
description: 'Tool description',
inputSchema: MyZodSchema, // 使用 Zod 定义的schema
toolHandler: myToolHandler, // 处理工具调用的函数
});
```
# MCP 协议标准规范
### 1. 工具定义标准
每个工具必须有:
- 唯一的名称
- 清晰的描述
- JSON Schema 格式的输入参数定义
### 2. 请求/响应格式
MCP 使用标准化的请求/响应格式:
***列出工具请求***
```TypeScript
// ListToolsRequest
{
method: "ListTools",
params: {}
}
// 响应
{
tools: Tool[]
}
```
***调用工具请求***
```TypeScript
// CallToolRequest
{
method: "CallTool",
params: {
name: string, // 工具名称
arguments: object // 工具参数
}
}
// 响应
{
content: [
{
type: "text",
text: string
}
// 也可能包含其他类型的内容
]
}
```
### 3. 工具执行流程
1. AI 客户端请求可用工具列表
2. 服务器返回工具列表和每个工具的参数规范
3. AI 客户端准备参数并调用特定工具
4. 服务器执行工具并返回结果
5. AI 客户端解析结果并继续对话
### 4. 配置标准
```JSON
{
"mcpServers": {
"server-name": {
"command": "启动命令",
"args": ["参数"],
"env": {
"环境变量": "值"
}
}
}
}
```
# 其他库
- @clack/prompts (^0.10.0) 创建交互式命令行提示的库
- 用于收集用户输入、显示进度和反馈。
- 显示确认提示 (confirm)
- 记录成功和信息消息 (log.success, log.message)
- 区块链交互由 `@hashkeychain/agentkit` 和 `viem` 处理
- MCP协议实现由 `@modelcontextprotocol/sdk` 提供
- 上链功能由 `@coinbase/onchainkit` 实现
- Coinbase API访问由 `@coinbase/coinbase-sdk` 提供
# @hashkeychain/agentkit 库
https://github.com/hashkey/agentkit
#
---------------------
# package.json 中的 coinbase 库
- agentkit 需要替换成 hashkey 修改之后的
- coinbase-sdk 目前还没能力替换成自己的
- agentkit-model-context-protocol:不用替换, 只用了类型
- onchainkit: 后续替换,优先级很低
## 本地调试
1. 在 agentkit 源码目录下执行(只需要一次)
```shell
cd ~/work/ai/hashkey-agentkit/typescript/agentkit
pnpm link --global
cd ~/work/ai/hashkey-agentkit/typescript/framework-extensions/model-context-protocol/
pnpm link --global
```
2. 在 base-mcp 项目目录下执行
```shell
cd ~/work/ai/base-mcp
pnpm link --global @hashkeychain/agentkit
pnpm link --global @hashkeychain/agentkit-model-context-protocol
```
3. 安装
```shell
pnpm install
```
4.