"添加前端模板和运行代码模块"
This commit is contained in:
6
qiming-run_code_rmcp/examples/cursor_mcp_config.json
Normal file
6
qiming-run_code_rmcp/examples/cursor_mcp_config.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"name": "Script Runner",
|
||||
"description": "执行JavaScript、TypeScript和Python代码",
|
||||
"path": "/path/to/script_runner",
|
||||
"transport": "stdio"
|
||||
}
|
||||
151
qiming-run_code_rmcp/examples/mcp_client.js
Normal file
151
qiming-run_code_rmcp/examples/mcp_client.js
Normal file
@@ -0,0 +1,151 @@
|
||||
// MCP客户端示例,用于与script_runner交互
|
||||
// 使用方法:node mcp_client.js
|
||||
|
||||
const { spawn } = require('node:child_process');
|
||||
const readline = require('node:readline');
|
||||
|
||||
// 启动script_runner进程
|
||||
const scriptRunner = spawn('script_runner', ['--verbose']);
|
||||
|
||||
// 创建读取标准输入的接口
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
});
|
||||
|
||||
// 处理script_runner的输出
|
||||
scriptRunner.stdout.on('data', (data) => {
|
||||
console.log(`接收到MCP服务器响应: ${data}`);
|
||||
try {
|
||||
const response = JSON.parse(data);
|
||||
console.log('解析后的响应:', JSON.stringify(response, null, 2));
|
||||
} catch (e) {
|
||||
console.log('无法解析为JSON,显示原始输出');
|
||||
}
|
||||
});
|
||||
|
||||
// 处理script_runner的错误
|
||||
scriptRunner.stderr.on('data', (data) => {
|
||||
console.error(`MCP服务器错误: ${data}`);
|
||||
});
|
||||
|
||||
// 处理script_runner进程结束
|
||||
scriptRunner.on('close', (code) => {
|
||||
console.log(`MCP服务器进程退出,退出码: ${code}`);
|
||||
rl.close();
|
||||
});
|
||||
|
||||
// 初始化MCP连接
|
||||
const initializeRequest = {
|
||||
jsonrpc: '2.0',
|
||||
id: 1,
|
||||
method: 'initialize',
|
||||
params: {
|
||||
client_info: {
|
||||
name: 'mcp_client_example'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 发送初始化请求
|
||||
console.log('发送初始化请求...');
|
||||
scriptRunner.stdin.write(JSON.stringify(initializeRequest) + '\n');
|
||||
|
||||
// 等待初始化响应后,发送工具列表请求
|
||||
setTimeout(() => {
|
||||
const listToolsRequest = {
|
||||
jsonrpc: '2.0',
|
||||
id: 2,
|
||||
method: 'listTools'
|
||||
};
|
||||
console.log('发送工具列表请求...');
|
||||
scriptRunner.stdin.write(JSON.stringify(listToolsRequest) + '\n');
|
||||
}, 1000);
|
||||
|
||||
// 等待工具列表响应后,执行JavaScript代码
|
||||
setTimeout(() => {
|
||||
const callToolRequest = {
|
||||
jsonrpc: '2.0',
|
||||
id: 3,
|
||||
method: 'callTool',
|
||||
params: {
|
||||
name: 'run_javascript',
|
||||
arguments: {
|
||||
code: 'console.log("Hello from JavaScript!"); return { message: "Hello, World!", value: 42 };'
|
||||
}
|
||||
}
|
||||
};
|
||||
console.log('发送JavaScript代码执行请求...');
|
||||
scriptRunner.stdin.write(JSON.stringify(callToolRequest) + '\n');
|
||||
}, 2000);
|
||||
|
||||
// 等待JavaScript执行响应后,执行TypeScript代码
|
||||
setTimeout(() => {
|
||||
const callToolRequest = {
|
||||
jsonrpc: '2.0',
|
||||
id: 4,
|
||||
method: 'callTool',
|
||||
params: {
|
||||
name: 'run_typescript',
|
||||
arguments: {
|
||||
code: 'const greeting: string = "Hello from TypeScript!"; console.log(greeting); return { message: greeting, timestamp: new Date().toISOString() };'
|
||||
}
|
||||
}
|
||||
};
|
||||
console.log('发送TypeScript代码执行请求...');
|
||||
scriptRunner.stdin.write(JSON.stringify(callToolRequest) + '\n');
|
||||
}, 3000);
|
||||
|
||||
// 等待TypeScript执行响应后,执行Python代码
|
||||
setTimeout(() => {
|
||||
const callToolRequest = {
|
||||
jsonrpc: '2.0',
|
||||
id: 5,
|
||||
method: 'callTool',
|
||||
params: {
|
||||
name: 'run_python',
|
||||
arguments: {
|
||||
code: 'import math\nprint("Hello from Python!")\nresult = math.sqrt(16)\nprint(f"Square root of 16 is {result}")\n{"message": "Hello from Python", "result": result}'
|
||||
}
|
||||
}
|
||||
};
|
||||
console.log('发送Python代码执行请求...');
|
||||
scriptRunner.stdin.write(JSON.stringify(callToolRequest) + '\n');
|
||||
}, 4000);
|
||||
|
||||
// 处理用户输入,允许用户发送自定义请求
|
||||
rl.on('line', (input) => {
|
||||
if (input.toLowerCase() === 'exit') {
|
||||
console.log('退出程序...');
|
||||
scriptRunner.kill();
|
||||
rl.close();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 尝试解析用户输入为JSON
|
||||
const request = JSON.parse(input);
|
||||
console.log('发送自定义请求:', JSON.stringify(request, null, 2));
|
||||
scriptRunner.stdin.write(JSON.stringify(request) + '\n');
|
||||
} catch (e) {
|
||||
console.error('输入不是有效的JSON:', e.message);
|
||||
}
|
||||
});
|
||||
|
||||
// 显示帮助信息
|
||||
console.log('\n=== MCP客户端示例 ===');
|
||||
console.log('已自动发送初始化、工具列表和代码执行请求');
|
||||
console.log('您可以输入自定义JSON请求,或输入"exit"退出程序');
|
||||
console.log('示例请求:');
|
||||
console.log(JSON.stringify({
|
||||
jsonrpc: '2.0',
|
||||
id: 100,
|
||||
method: 'callTool',
|
||||
params: {
|
||||
name: 'run_javascript',
|
||||
arguments: {
|
||||
code: 'return "Hello, " + new Date().toISOString();'
|
||||
}
|
||||
}
|
||||
}, null, 2));
|
||||
console.log('====================\n');
|
||||
78
qiming-run_code_rmcp/examples/mcp_client_example.js
Normal file
78
qiming-run_code_rmcp/examples/mcp_client_example.js
Normal file
@@ -0,0 +1,78 @@
|
||||
// 这是一个使用JavaScript调用MCP服务的示例
|
||||
// 你可以使用任何支持MCP协议的客户端来调用我们的服务
|
||||
// 以下是一个简单的示例,展示如何调用我们的服务
|
||||
|
||||
// 假设我们已经连接到了MCP服务
|
||||
|
||||
// 执行JavaScript代码示例
|
||||
async function testRunJavaScript() {
|
||||
const code = `
|
||||
// 一些处理代码
|
||||
console.log("Processing JavaScript...");
|
||||
|
||||
function handler(input) {
|
||||
// 输入包含通过参数传递的数据
|
||||
console.log("Received input:", input);
|
||||
|
||||
// 返回最终结果
|
||||
return "Hello from JavaScript! Input: " + JSON.stringify(input);
|
||||
}
|
||||
`;
|
||||
|
||||
const params = { name: "JavaScript User", data: [1, 2, 3] };
|
||||
|
||||
// 在实际的MCP客户端中,你会使用类似以下的代码调用服务
|
||||
// const result = await client.run_javascript({ code, params });
|
||||
// console.log(result);
|
||||
}
|
||||
|
||||
// 执行TypeScript代码示例
|
||||
async function testRunTypeScript() {
|
||||
const code = `
|
||||
// 一些处理代码
|
||||
console.log("Processing TypeScript...");
|
||||
|
||||
function handler(input: any): string {
|
||||
// 输入包含通过参数传递的数据
|
||||
console.log("Received input:", input);
|
||||
|
||||
// 返回最终结果
|
||||
return \`Hello from TypeScript! Input: \${JSON.stringify(input)}\`;
|
||||
}
|
||||
`;
|
||||
|
||||
const params = { name: "TypeScript User", count: 42 };
|
||||
|
||||
// 在实际的MCP客户端中,你会使用类似以下的代码调用服务
|
||||
// const result = await client.run_typescript({ code, params });
|
||||
// console.log(result);
|
||||
}
|
||||
|
||||
// 执行Python代码示例
|
||||
async function testRunPython() {
|
||||
const code = `
|
||||
# 一些处理代码
|
||||
print("Processing Python...")
|
||||
|
||||
def handler(args):
|
||||
# args 包含通过参数传递的数据
|
||||
print(f"Received args: {args}")
|
||||
|
||||
# 返回最终结果
|
||||
return f"Hello from Python! Args: {args}"
|
||||
`;
|
||||
|
||||
const params = { name: "Python User", values: [10, 20, 30] };
|
||||
|
||||
// 在实际的MCP客户端中,你会使用类似以下的代码调用服务
|
||||
// const result = await client.run_python({ code, params });
|
||||
// console.log(result);
|
||||
}
|
||||
|
||||
// 在实际的MCP客户端中,你可以按顺序调用这些函数
|
||||
// await testRunJavaScript();
|
||||
// await testRunTypeScript();
|
||||
// await testRunPython();
|
||||
|
||||
// 注意:这个文件只是一个示例,不能直接运行
|
||||
// 你需要使用支持MCP协议的客户端(如Cursor)来调用我们的服务
|
||||
21
qiming-run_code_rmcp/examples/test_mcp.sh
Normal file
21
qiming-run_code_rmcp/examples/test_mcp.sh
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 测试script_runner的简单bash脚本
|
||||
|
||||
# 初始化请求
|
||||
echo "发送初始化请求..."
|
||||
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"client_info":{"name":"test_client"}}}' | script_runner
|
||||
|
||||
# 等待一下
|
||||
sleep 1
|
||||
|
||||
# 列出工具请求
|
||||
echo -e "\n发送列出工具请求..."
|
||||
echo '{"jsonrpc":"2.0","id":2,"method":"listTools"}' | script_runner
|
||||
|
||||
# 等待一下
|
||||
sleep 1
|
||||
|
||||
# 执行JavaScript代码
|
||||
echo -e "\n发送JavaScript代码执行请求..."
|
||||
echo '{"jsonrpc":"2.0","id":3,"method":"callTool","params":{"name":"run_javascript","arguments":{"code":"console.log(\"Hello from JavaScript!\"); return { message: \"Hello, World!\", value: 42 };"}}}' | script_runner
|
||||
Reference in New Issue
Block a user