Hand your research agents a clean Markdown reader for X. No scraping, no rate limits, no X API key — your agents talk to xmd; xmd talks to X.
CrewAI agents work best when their tools return predictable, structured strings. Pointing an agent at a raw x.com URL is unreliable: the page renders client-side, serves a login wall to anonymous fetchers, and changes structure often. Even when you wire up a generic web-scraping tool, the agent ends up reasoning over login prompts and recommendation modules instead of the actual post.
xmd resolves the post once, server-side, and returns a Markdown string. That string is what your agent reads — short for tweets, well-structured for threads, full prose for long-form articles.
The web converter ships. The HTTP API does not yet. Until it does, the practical CrewAI pattern is:
description or expected_output as context.Useful for one-off research jobs ("read this thread, write a counter-argument essay") or for seeding a research Crew with a curated reading list at process start.
When the xmd HTTP API ships, wrap it as a Tool. CrewAI's contract is simple — any callable that takes typed inputs and returns a string qualifies. The shape will look like:
from crewai.tools import BaseTool
import requests
class XReader(BaseTool):
name: str = "x_reader"
description: str = "Read an X (Twitter) URL and return clean Markdown."
def _run(self, url: str) -> str:
# When the xmd API ships, this becomes a single HTTP call.
# Returns Markdown the agent can reason over directly.
...Drop the tool onto a research agent's tools list and any task that mentions an X URL becomes one the agent can actually read.
Convert the URL at xmdbot.com, copy the Markdown, paste it into the agent's task description or backstory. The Markdown is short, clean, and readable — your agent reads it as a normal text input. This is the manual workflow until the HTTP API ships.
As soon as the xmd HTTP API ships. The pattern will be standard: subclass CrewAI's BaseTool (or use the @tool decorator), call the xmd endpoint inside _run, return the Markdown string. Join the API waitlist on this page to get notified.
Yes — both are just thin wrappers over a callable that takes a URL and returns a string. The xmd HTTP response is a Markdown string, which is exactly what CrewAI's tool contract expects. No special integration is needed.
Yes. CrewAI's task outputs and shared context propagate between agents in a Crew. Convert once at the start of the Crew (or in a dedicated 'researcher' agent), then pass the Markdown forward to writer, reviewer, or summariser agents through their task descriptions.
Not when going through xmd. The agents call xmd, xmd handles the X interaction server-side. Your CrewAI process never talks to x.com directly, so you do not need cookies, an X API key, or backoff logic in your agent code.
Try the manual flow now — paste an X URL into xmd, copy the Markdown, drop it into your CrewAI task. Same input format your agents will get when the Tool wrapper ships.