搜索协议服务器

Perplexity MCP服务器提供强大的搜索功能,包括网页搜索、学术研究、金融数据和高级筛选选项,适用于多种搜索场景。

  • by gomcpgo
  • Go
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 gomcpgo/perplexity-mcp-server

使用说明

困惑MCP服务器

MCP(模型上下文协议)服务器,提供对Perplexity AI强大搜索功能的访问,包括网络搜索、学术研究、财务数据和高级过滤选项。

特性

困惑MCP服务器提供 六种功能 全面的搜索和结果管理:

搜索功能(4)

每个都针对不同的用例进行了优化。 所有函数都会自动返回源URL 如果启用了缓存,则将结果保存在本地。

  1. perplexity_search:具有实时信息的一般网络搜索。最适合时事、常识和快速事实。

  2. perplexity_academic_search:自动筛选学术资源(arxiv.org、pubmed、期刊)。最适合研究论文、科学研究和学术内容。

  3. perplexity_financial_search:针对金融领域和最新数据进行了优化。最适合股票分析、收益报告、美国证券交易委员会文件和市场趋势。

  4. perplexity_filtered_search:具有多种过滤选项的高级搜索。当您需要特定的域过滤、内容类型或基于位置的结果时,这是最好的选择。

缓存管理功能(2)

管理以前保存的搜索结果,以便于参考和重用。

  1. list_previous:列出所有具有唯一ID的先前搜索查询,按最近度排序。返回包含查询详细信息的JSON数组。

  2. get_previous_result:通过其唯一的10个字符的ID检索以前缓存的搜索结果。

安装

  1. 确保您已安装Go 1.23或更高版本
  2. 克隆此存储库
  3. 构建服务器:
    ./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"
}

响应格式

所有搜索函数都以以下格式返回响应:

  1. 主要内容:搜索结果和答案
  2. 源URL:LLM可以获取的源URL列表,以获取更多详细信息
  3. 详细来源 (如果可用):每个源的标题、URL和代码段
  4. 相关问题 (如有要求):建议的后续问题
  5. 结果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许可证-有关详细信息,请参阅许可证文件。