# CrewAI

> 连接托管的 Search1API MCP 服务器，为 CrewAI 智能体提供实时网页搜索、新闻、智能搜索和页面读取。

Canonical URL: https://s1.dev/zh/docs/integrations/crewai

CrewAI 智能体可以通过托管的 [MCP 服务器](https://s1.dev/zh/docs/integrations/mcp)（`https://mcp.search1api.com/mcp`）使用 Search1API，无需额外安装包：CrewAI 的 `mcps` 字段会连接服务器、发现工具并交给智能体。一个连接即可获得网页搜索、新闻、智能搜索和页面读取。

## 安装

```bash
pip install crewai mcp
```

在[仪表盘](https://app.s1.dev)创建密钥，然后导出：

```bash
export SEARCH1API_API_KEY="your-api-key"
```

## 为智能体接入 Search1API

传入一个 `MCPServerHTTP` 配置，把密钥放在 `Authorization` 请求头里。工具过滤器让智能体只拿到研究任务需要的工具。

```python
import os

from crewai import Agent, Crew, Task
from crewai.mcp import MCPServerHTTP
from crewai.mcp.filters import create_static_tool_filter

search1api = MCPServerHTTP(
    url="https://mcp.search1api.com/mcp",
    headers={"Authorization": f"Bearer {os.environ['SEARCH1API_API_KEY']}"},
    tool_filter=create_static_tool_filter(
        allowed_tool_names=["search", "news", "ask", "crawl"]
    ),
    cache_tools_list=True,
)

researcher = Agent(
    role="Research Analyst",
    goal="Answer questions with current, cited sources from the web",
    backstory="You search first, read the most relevant pages, and cite every claim.",
    mcps=[search1api],
)

task = Task(
    description="What changed in CrewAI this month? Read the release notes before answering.",
    expected_output="A short summary with a source URL for each change",
    agent=researcher,
)

result = Crew(agents=[researcher], tasks=[task]).kickoff()
print(result)
```

智能体使用的模型按 CrewAI 的常规方式选择：通过 `llm=` 或环境变量。

## 工具

服务器向 CrewAI 提供的工具与其他 MCP 客户端相同。对智能体最有用的几个：

| 工具 | 作用 | 积分 |
| --- | --- | --- |
| `search` | 网页搜索，覆盖 Google、Bing、Reddit、GitHub、YouTube 等引擎 | 1 |
| `news` | 近期新闻 | 1 |
| `ask` | 描述你的需求，由 Search1API 选择来源和时间范围 | 5 |
| `crawl` | 把已知 URL 读成干净的正文 | 1 |
| `sitemap` | 列出网站上的链接 | 1 |
| `deepcrawl` | 读取同一网站的多个页面，例如一整节文档 | 每个任务 20 |

另外还有 `maps` 和 `trending`。全部工具及其参数见 [MCP 服务器](https://s1.dev/zh/docs/integrations/mcp)，当前计费见[积分与限制](https://s1.dev/zh/docs/essentials/credits-and-limits)。

有两个工具是为聊天应用设计的，不适合智能体：`render_results` 在客户端界面里绘制来源卡片，`send_feedback` 向 Search1API 团队反馈问题。给 crew 配置时，不要把它们放进 `allowed_tool_names`。

> **info:** CrewAI 会给每个工具加上服务器名前缀，所以智能体看到的名字类似 `mcp_search1api_com_mcp_search`。工具过滤器使用上表中的原始名称。

## 用 URL 快速接入

快速测试时，CrewAI 也接受字符串形式的服务器地址。末尾加 `#search` 表示只加载这一个工具：

```python
researcher = Agent(
    role="Research Analyst",
    goal="Answer questions with current sources",
    backstory="You search before you answer.",
    mcps=[f"https://mcp.search1api.com/mcp?apiKey={os.environ['SEARCH1API_API_KEY']}#search"],
)
```

这种写法会把密钥放进 URL，可能被记录到日志里。正式部署请使用上面的请求头配置。

## CrewBase 项目

在用 `crewai create crew` 创建的项目里，在智能体的 `@agent` 方法中设置 `mcps`：

```python
@agent
def researcher(self) -> Agent:
    return Agent(config=self.agents_config["researcher"], mcps=[search1api])
```

> **warn:** 请使用 `mcps`，不要用 `mcp_server_params` 和 `MCPServerAdapter`。在 `crewai-tools` 1.15 中，适配器会把未设置的可选参数作为 `null` 发送，`search` 和 `news` 调用会因 `time_range` 校验失败而被拒绝。`mcps` 字段没有这个问题。

## 相关内容

- [MCP 服务器](https://s1.dev/zh/docs/integrations/mcp)：认证、OAuth 和全部工具
- [LangChain](https://s1.dev/zh/docs/integrations/langchain)：LangChain 智能体的原生工具
- [CrewAI MCP 文档](https://docs.crewai.com/en/mcp/overview)