使用说明
困惑MCP服务器
MCP(模型上下文协议)服务器,提供对Perplexity AI强大搜索功能的访问,包括网络搜索、学术研究、财务数据和高级过滤选项。
特性
困惑MCP服务器提供 六种功能 全面的搜索和结果管理:
搜索功能(4)
每个都针对不同的用例进行了优化。 所有函数都会自动返回源URL 如果启用了缓存,则将结果保存在本地。
-
perplexity_search:具有实时信息的一般网络搜索。最适合时事、常识和快速事实。 -
perplexity_academic_search:自动筛选学术资源(arxiv.org、pubmed、期刊)。最适合研究论文、科学研究和学术内容。 -
perplexity_financial_search:针对金融领域和最新数据进行了优化。最适合股票分析、收益报告、美国证券交易委员会文件和市场趋势。 -
perplexity_filtered_search:具有多种过滤选项的高级搜索。当您需要特定的域过滤、内容类型或基于位置的结果时,这是最好的选择。
缓存管理功能(2)
管理以前保存的搜索结果,以便于参考和重用。
-
list_previous:列出所有具有唯一ID的先前搜索查询,按最近度排序。返回包含查询详细信息的JSON数组。 -
get_previous_result:通过其唯一的10个字符的ID检索以前缓存的搜索结果。
安装
- 确保您已安装Go 1.23或更高版本
- 克隆此存储库
- 构建服务器:
./run.sh build
配置
服务器需要一个Perplexity API密钥,并通过环境变量支持各种配置选项:
必需
PERPLEXITY_API_KEY:您的困惑AI API密钥
可选的
PERPLEXITY_DEFAULT_MODEL:要使用的默认型号(默认:“声纳”)sonar:快速、经济高效地搜索快速事实sonar-pro:全面搜索,具有更好的深度和覆盖范围
PERPLEXITY_MAX_TOKENS:响应中的最大令牌数(默认值:1024)PERPLEXITY_TEMPERATURE:响应随机性0-2(默认值:0.2)PERPLEXITY_TOP_P:Nucleus采样参数(默认值:0.9)PERPLEXITY_TOP_K:Top-k采样参数(默认值:0)PERPLEXITY_TIMEOUT:请求超时时间(默认值:30s)PERPLEXITY_RETURN_IMAGES:默认情况下包含图像(默认值:false)PERPLEXITY_RETURN_RELATED:默认情况下包含相关问题(默认值:false)PERPLEXITY_RESULTS_ROOT_FOLDER:存储缓存搜索结果的目录(默认:空/禁用)
用法
MCP服务器模式
在MCP模式下运行服务器(默认):
export PERPLEXITY_API_KEY="your-api-key"
./run.sh run
# or directly: ./perplexity
终端模式(CLI测试)
直接从命令行测试单个功能:
export PERPLEXITY_API_KEY="your-api-key"
# Test different search types
./run.sh search "latest AI news" sonar-pro
./run.sh academic "quantum computing" sonar-pro
./run.sh financial "AAPL earnings" sonar-pro
./run.sh filtered "renewable energy" sonar-pro
# Cache management
./run.sh list # List previous queries
./run.sh get ABC123XYZ0 # Get cached result by ID
集成测试
针对真正的困惑API运行集成测试:
export PERPLEXITY_API_KEY="your-api-key"
./run.sh integration-test
MCP客户端配置
要将此服务器与MCP客户端一起使用,请将其添加到您的客户端配置中:
{
"servers": {
"perplexity": {
"command": "path/to/perplexity",
"env": {
"PERPLEXITY_API_KEY": "your-api-key"
}
}
}
}
本地结果缓存
当出现以下情况时,服务器会自动缓存搜索结果 PERPLEXITY_RESULTS_ROOT_FOLDER 已配置:
- 存储:每个结果都保存在
/unique_id/result.md元数据在/unique_id/metadata.yaml - 唯一ID:10个字符的字母数字标识符(例如。,
A1B2C3D4E5) - 结果ID:启用缓存后,搜索响应包括
**Result ID:** ABC123XYZ0 - 不得重复使用:每次搜索都会创建一个新的缓存条目,即使对于相同的查询也是如此
- LLM集成:非常适合LLM在对话中参考之前的搜索
缓存管理示例
# List previous searches
echo '{"method": "tools/call", "params": {"name": "list_previous", "arguments": {}}}' | ./perplexity
# Get specific result
echo '{"method": "tools/call", "params": {"name": "get_previous_result", "arguments": {"unique_id": "A1B2C3D4E5"}}}' | ./perplexity
函数参考
困惑研究
执行一般网络搜索。
参数:
query(必填):搜索查询model:选择“声纳”进行快速搜索,或选择“声纳专业版”进行全面搜索(默认:声纳)search_domain_filter:要包含的域数组search_exclude_domains:要排除的域数组search_recency_filter:时间过滤器(小时、天、周、月、年)return_images:包括图像return_related_questions:包括相关问题max_tokens:最大响应令牌数temperature:响应随机性(0-2)date_range_start:开始日期(YYYY-MM-DD)date_range_end:结束日期(YYYY-MM-DD)location:地理特定搜索位置
例子:
{
"query": "latest AI developments",
"model": "sonar-pro",
"search_recency_filter": "week",
"return_citations": true
}
困惑_学术研究
搜索学术论文和学术内容。
参数:
query(必填):学术搜索查询subject_area:学术科目(如“物理”、“计算机科学”)model:默认为“sonar pro”以获得全面的学术成果search_domain_filter:一系列学术领域search_recency_filter:时间过滤器max_tokens:最大响应令牌数temperature:响应随机性
例子:
{
"query": "quantum computing applications",
"subject_area": "Physics",
"search_recency_filter": "year"
}
困惑_金融_研究
搜索财务数据和SEC文件。
参数:
query(必填):财务搜索查询ticker:股票代码(例如“AAPL”)company_name:公司名称report_type:财务报告类型(例如,“10-K”、“10-Q”、“8-K”)model:默认为“sonar pro”以获取全面的财务数据search_recency_filter:时间过滤器date_range_start:报告开始日期date_range_end:报告结束日期max_tokens:最大响应令牌数
例子:
{
"query": "quarterly earnings",
"ticker": "MSFT",
"report_type": "10-Q",
"search_recency_filter": "month"
}
困惑_过滤_搜索
具有全面过滤功能的高级搜索。
参数:
query(必填):搜索查询model:根据需要选择(默认为sonar pro)search_domain_filter:要包含的域数组search_exclude_domains:要排除的域数组search_recency_filter:时间过滤器content_type:内容类型(新闻、学术、博客等)file_type:文件类型过滤器(pdf、doc、html等)language:语言筛选器country:地理特定搜索的国家date_range_start:开始日期date_range_end:结束日期return_citations:包括引用return_images:包括图像return_related_questions:包括相关问题max_tokens:最大响应令牌数temperature:响应随机性custom_filters:具有附加键值过滤器的对象
例子:
{
"query": "renewable energy innovations",
"content_type": "news",
"language": "English",
"country": "Germany",
"search_recency_filter": "month",
"custom_filters": {
"industry": "energy",
"technology": "solar"
}
}
list_previous
列出所有包含元数据的先前搜索查询。
参数: 无
答复: 带有查询历史的JSON数组,按最近时间排序(最近的优先)。
例子:
[
{
"query": "latest AI developments",
"unique_id": "A1B2C3D4E5",
"datetime": "2025-01-15T10:30:45Z",
"search_type": "general"
},
{
"query": "quantum computing research",
"unique_id": "X9Y8Z7W6V5",
"datetime": "2025-01-15T09:15:30Z",
"search_type": "academic"
}
]
get_previous_result
通过唯一ID检索缓存的搜索结果。
参数:
unique_id(必填):缓存结果的10个字符的字母数字ID
退货: 缓存搜索的完整降价结果。
例子:
{
"unique_id": "A1B2C3D4E5"
}
响应格式
所有搜索函数都以以下格式返回响应:
- 主要内容:搜索结果和答案
- 源URL:LLM可以获取的源URL列表,以获取更多详细信息
- 详细来源 (如果可用):每个源的标题、URL和代码段
- 相关问题 (如有要求):建议的后续问题
- 结果ID (如果启用了缓存):用于稍后检索此结果的唯一10个字符的ID
响应结构示例:
[Main search results content...]
## Source URLs
1. https://example.com/article1
2. https://example.com/article2
3. https://example.com/article3
## Detailed Sources
1. **Article Title**
URL: https://example.com/article1
Snippet: Brief excerpt from the article...
## Related Questions
- What are the latest developments?
- How does this compare to...?
**Result ID:** A1B2C3D4E5
发展
运行测试
运行单元测试:
./run.sh test
使用真正的API运行集成测试:
./run.sh integration-test
项目结构
服务器遵循干净的架构原则,关注点分离:
perplexity/
├── cmd/
│ └── main.go # Thin entry point with terminal mode (~200 lines)
├── pkg/
│ ├── handler/ # MCP protocol layer
│ │ ├── handler.go # Main MCP handler
│ │ ├── tools.go # Tool definitions
│ │ └── search_handlers.go # Parameter extraction
│ ├── search/ # Core business logic
│ │ ├── types.go # Local search types
│ │ ├── search.go # Strongly-typed search functions
│ │ └── client.go # Perplexity API client
│ ├── cache/ # Result caching system
│ ├── config/ # Configuration management
│ └── types/ # Perplexity API types
├── test/
│ └── test.go # Integration tests
└── README.md
架构优势
- 瘦主.go:从360条减少到197条(减少45%)
- 终端模式:直接CLI测试,无需MCP协议开销
- 关注点分离:MCP协议处理与业务逻辑分开
- 强类型:核心函数使用正确的Go结构,而不是
map[string]interface{} - 本地类型:每个包都有自己的类型,防止循环依赖
- 易于测试:业务逻辑可以独立测试
错误处理
服务器处理各种错误情况:
- API密钥无效或丢失(401)
- 速率限制(429)
- 无效参数(400)
- 服务器错误(500)
错误会返回描述性消息,以帮助诊断问题。
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
