[FEATURE] Add a Webz.io news search tool to crewai-tools
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 58.8k
- Forks
- 8.5k
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 109
Description
Feature Area
Integration with external tools
Is your feature request related to a an existing bug? Please link it here.
NA — this is a new integration, not a bug.
Describe the solution you'd like
crewai-tools has broad web search coverage (Serper, Brave, Exa, Tavily, LinkUp, SerpApi), but no tool dedicated to news search. Agents doing media monitoring, PR analysis, or event tracking currently have to filter general web results down to news themselves, and they lose the metadata that makes news usable — publication date, source, language, country, sentiment.
I'd like a WebzioNewsSearchTool that searches Webz.io's news index, which crawls hundreds of thousands of news and blog sources across languages and countries. Results would come back with title, url, publication date, source, language and text, so an agent can cite what it found.
The natural implementation is on top of Webz.io's hosted News Search MCP server, using the MCPServerAdapter already in crewai_tools.adapters. That has a specific benefit over a hand-written schema: the tool can fetch its argument schema from the MCP server at construction time, so the server-side filters (currently about 26 of them — language, country, published date, sentiment, domain rank, category, entity filters, and so on) stay available to agents without a crewai-tools release every time Webz.io adds one.
Proposed usage, matching the shape of the existing search tools:
from crewai import Agent
from crewai_tools import WebzioNewsSearchTool
news_tool = WebzioNewsSearchTool() # reads WEBZ_API_TOKEN
analyst = Agent(
role="News Analyst",
goal="Report what the press is saying about a topic",
backstory="A media analyst who searches the news and summarizes coverage.",
tools=[news_tool],
)
Describe alternatives you've considered
- Attaching the MCP server to the agent directly with
MCPServerHTTP(url="https://news-search-mcp.webz.io/mcp", ...). This works today and is worth documenting, but it attaches the whole server rather than one named tool, so it can't be composed into atools=[...]list, doesn't appear intool.specs.json, and doesn't get theEnvVardeclarations that the rest of the tool catalog exposes. - Hand-writing the filter schema as a Pydantic model. Straightforward, but it freezes the filter list at release time and would need a
crewai-toolsrelease whenever Webz.io adds a filter. - A separate third-party package. I published one (
crewai-webzio) as a first step, but a news tool belongs alongside the other search tools in the catalog so it is discoverable from the docs and the tool specs.
Additional context
Two design points worth flagging early, since they affect how the tool behaves in CI and at import time:
MCPServerAdapter.__init__connects eagerly and raisesRuntimeErroron failure. To keep tool construction safe at import time and under the repo's--block-networkpytest setting, the tool would catch that, keep aquery-only fallback schema, and retry the connection on the first search — which is where a missing token or unreachable server gets reported.ToolSpecExtractorreads class-level schemas, sotool.specs.jsonwould record thequery-only fallback rather than the live 26-field schema. That seems like the right trade for not hardcoding the filter list, but it's a deliberate choice rather than an oversight.
Willingness to Contribute
Yes, I'd be happy to submit a pull request
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading MCPServerAdapter in crewai_tools.adapters and ToolSpecExtractor, then inspect how existing search tools are exposed in the catalog. Run pytest with --block-network and verify that WebzioNewsSearchTool uses the fallback schema safely, retries on first search, and is available through the documented tools list and tool.specs.json.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- api, tooling
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 58/100