README
🚀 第二意见 MCP 服务器
这是一个融合了多种 AI 技术的 MCP 服务器,专为解答编程问题而生。它整合了谷歌 Gemini AI 的洞察、Stack Overflow 的最佳实践答案以及 Perplexity AI 的分析结果,为用户提供更全面、更准确的问题解决方案。
🚀 快速开始
安装配置
1. 创建配置文件
在项目根目录下新建 config.ts 文件,内容如下:
export const CONFIG = {
AI_API_KEY: 'your_api_key_here', // 替换为你的 API 密钥
STACK_OVERFLOW_API_KEY: 'your_stack_overflow_key_here' // 替换为你的 Stack Overflow API 密钥
};
2. 安装依赖项
使用 npm 或 yarn 安装所需包:
npm install @types/node @types/express express axios
3. 启动服务器
执行以下命令启动 MCP 服务器:
node index.ts
使用说明
功能概述
该服务器提供以下核心功能:
- 多源解答:整合 Gemini AI、Stack Overflow 和 Perplexity AI 的结果,生成更全面的解决方案。
- 语言检测:自动识别文件语言并提供相应支持(如 JavaScript、Python 等)。
- 代码处理:提取和格式化代码片段,便于展示和分析。
请求示例
示例输入
{
"query": "如何在 Node.js 中实现异步通信",
"file_path": "src/server.ts"
}
示例输出
## 解决方案概述
针对问题 "如何在 Node.js 中实现异步通信",以下是分步骤的解决方案:
### 步骤 1: 使用内置模块 `async` 或 `await`
Node.js 提供了强大的 async/await 特性来处理异步操作。你可以直接使用这些特性来实现异步通信。
#### 示例代码
```javascript
const fs = require('fs');
// 异步读取文件内容
async function readFileAsync(filePath) {
try {
const data = await fs.promises.readFile(filePath, 'utf8');
console.log(data);
} catch (error) {
console.error('读取文件失败:', error);
}
}
readFileAsync('src/server.ts');
步骤 2: 利用第三方库进行高级异步处理
如果需要更复杂的异步操作,可以考虑使用 rxjs 或 bluebird 等第三方库。
示例代码
const { Observable } = require('rxjs');
// 使用 RxJS 实现异步通信
Observable.fromEventPattern(document, 'click')
.subscribe(() => {
console.log('页面被点击了');
});
最佳实践
- 错误处理:始终在 async 函数内部使用 try-catch 块。
- 日志记录:建议集成专业的日志系统(如 Winston)以更好地追踪异步操作。
- 性能优化:避免不必要的嵌套,保持代码简洁。
## ✨ 主要特性
- 提供详细的问题解决方案,结合多源上下文信息
- 自动检测文件语言(通过文件扩展名)
- 代码片段提取与格式化
- 自动生成 Markdown 格式的解决方案报告
- Git 感知的文件上下文收集
## 📦 安装指南
### 创建配置文件
在项目根目录下新建 `config.ts` 文件,内容如下:
```typescript
export const CONFIG = {
AI_API_KEY: 'your_api_key_here', // 替换为你的 API 密钥
STACK_OVERFLOW_API_KEY: 'your_stack_overflow_key_here' // 替换为你的 Stack Overflow API 密钥
};
安装依赖项
使用 npm 或 yarn 安装所需包:
npm install @types/node @types/express express axios
启动服务器
执行以下命令启动 MCP 服务器:
node index.ts
💻 使用示例
基础用法
示例输入
{
"query": "如何在 Node.js 中实现异步通信",
"file_path": "src/server.ts"
}
示例输出
## 解决方案概述
针对问题 "如何在 Node.js 中实现异步通信",以下是分步骤的解决方案:
### 步骤 1: 使用内置模块 `async` 或 `await`
Node.js 提供了强大的 async/await 特性来处理异步操作。你可以直接使用这些特性来实现异步通信。
#### 示例代码
```javascript
const fs = require('fs');
// 异步读取文件内容
async function readFileAsync(filePath) {
try {
const data = await fs.promises.readFile(filePath, 'utf8');
console.log(data);
} catch (error) {
console.error('读取文件失败:', error);
}
}
readFileAsync('src/server.ts');
步骤 2: 利用第三方库进行高级异步处理
如果需要更复杂的异步操作,可以考虑使用 rxjs 或 bluebird 等第三方库。
示例代码
const { Observable } = require('rxjs');
// 使用 RxJS 实现异步通信
Observable.fromEventPattern(document, 'click')
.subscribe(() => {
console.log('页面被点击了');
});
最佳实践
- 错误处理:始终在 async 函数内部使用 try-catch 块。
- 日志记录:建议集成专业的日志系统(如 Winston)以更好地追踪异步操作。
- 性能优化:避免不必要的嵌套,保持代码简洁。
## 📚 详细文档
### 项目结构
src/ ├── config.ts # 配置文件和 API 设置 ├── fileUtils.ts # 文件操作和语言检测逻辑 ├── index.ts # 应用入口点 ├── perplexity.ts # Perplexity AI 的集成实现 ├── server.ts # MCP 服务器主逻辑 ├── stackOverflow.ts # Stack Overflow API 的调用接口 └── types.ts # TypeScript 类型定义文件
### 已知问题
请参考 [errors.md](./errors.md) 查看当前已知的问题和解决方案。
> ⚠️ **重要提示**
>
> 使用该服务器前,请确保已经正确配置了所有必要的 API 密钥,并且网络环境允许访问相关 AI 服务。
Scan to join WeChat group