Skip to main content
Glama
Replicant-Partners

Firecrawl Agent MCP Server

README.md
# Firecrawl Agent MCP Server

A Model Context Protocol (MCP) server that provides AI-powered web data extraction and research capabilities through [Firecrawl's Agent API](https://www.firecrawl.dev/agent).

## Features

šŸ¤– **AI Agent Mode**: Let the agent autonomously search, navigate, and gather data from complex websites
šŸ” **Web Search**: Search and scrape multiple results at once
šŸ“„ **Single Page Scraping**: Extract content from specific URLs
šŸ“Š **Structured Data**: Define JSON schemas for type-safe data extraction
šŸ’° **Cost Control**: Set maximum credit limits per request
⚔ **Async Jobs**: Start long-running tasks and poll for results

## What is Firecrawl Agent?

Firecrawl Agent is a magic API that:
- **No URLs Required**: Just describe what you need via prompt
- **Autonomous Navigation**: Searches and navigates deep into sites to find your data
- **Parallel Processing**: Processes multiple sources simultaneously for faster results
- **Structured Output**: Returns data in your specified JSON schema format

Perfect for:
- Research tasks across multiple websites
- Extracting structured data (company info, pricing, contacts)
- Finding hard-to-reach information
- Competitive analysis and market research

## Installation

### 1. Clone or Copy Files

```bash
cd firecrawl-agent-mcp
```

### 2. Install Dependencies

```bash
npm install
```

### 3. Configure API Key

Copy the example environment file and add your Firecrawl API key:

```bash
cp .env.example .env
```

Edit `.env` and add your API key:

```env
FIRECRAWL_API_KEY=fc-YOUR_API_KEY_HERE
```

Get your API key from: https://www.firecrawl.dev/

### 4. Build the Server

```bash
npm run build
```

## Configuration in Claude Code

Add the Firecrawl Agent MCP server to your Claude Code configuration:

### Option 1: Edit `.claude/settings.json`

```json
{
  "mcpServers": {
    "firecrawl-agent": {
      "command": "node",
      "args": ["/absolute/path/to/firecrawl-agent-mcp/dist/server.js"],
      "env": {
        "FIRECRAWL_API_KEY": "fc-YOUR_API_KEY_HERE"
      }
    }
  }
}
```

### Option 2: Use `.mcp.json` in Project Root

```json
{
  "mcpServers": {
    "firecrawl-agent": {
      "command": "node",
      "args": ["./firecrawl-agent-mcp/dist/server.js"],
      "env": {
        "FIRECRAWL_API_KEY": "fc-YOUR_API_KEY_HERE"
      }
    }
  }
}
```

## Available Tools

### `agent_execute`

Execute the AI agent synchronously (waits for completion).

**Use when**: You need immediate results for research tasks.

**Parameters**:
- `prompt` (required): Describe what data you want to extract
- `urls` (optional): Specific URLs to search (otherwise searches web)
- `schema` (optional): JSON schema for structured output
- `maxCredits` (optional): Maximum credits to spend

**Example**:
```typescript
{
  "prompt": "Find the founders and founding year of Anthropic",
  "schema": {
    "type": "object",
    "properties": {
      "founders": { "type": "array", "items": { "type": "string" } },
      "founded": { "type": "number" }
    }
  }
}
```

### `agent_start`

Start an agent job asynchronously (returns job ID immediately).

**Use when**: You have long-running research tasks and want to poll for results.

**Parameters**: Same as `agent_execute`

**Returns**: Job ID to use with `agent_status`

### `agent_status`

Check the status of an asynchronous agent job.

**Parameters**:
- `jobId` (required): Job ID from `agent_start`

**Returns**: Current status, progress, and results if completed

### `scrape`

Scrape a single URL without AI agent capabilities.

**Use when**: You just need to extract content from one specific page.

**Parameters**:
- `url` (required): URL to scrape
- `formats` (optional): Output formats (`markdown`, `html`, `rawHtml`, `links`, `screenshot`)
- `onlyMainContent` (optional): Extract only main content (default: true)
- `includeTags` (optional): HTML tags to include
- `excludeTags` (optional): HTML tags to exclude
- `waitFor` (optional): Wait time for JS rendering (ms)
- `timeout` (optional): Request timeout (ms)

### `search`

Search the web and scrape multiple results.

**Use when**: You want to find and extract data from multiple sources at once.

**Parameters**:
- `query` (required): Search query
- `limit` (optional): Maximum number of results (default: 5)
- `formats` (optional): Output formats for each result

## Usage Examples

### Example 1: Research Company Information

```typescript
// Ask Claude Code:
"Use Firecrawl Agent to find information about Anthropic's founding team"

// Claude will call:
agent_execute({
  prompt: "Find the founders of Anthropic and when the company was founded",
  schema: {
    type: "object",
    properties: {
      founders: {
        type: "array",
        items: { type: "string" }
      },
      founded: { type: "number" },
      description: { type: "string" }
    }
  }
})
```

### Example 2: Extract Pricing Information

```typescript
// Ask Claude Code:
"Get pricing information for Claude API"

// Claude will call:
agent_execute({
  prompt: "Extract all pricing tiers and costs for Claude API",
  urls: ["https://www.anthropic.com/pricing"]
})
```

### Example 3: Competitive Analysis

```typescript
// Ask Claude Code:
"Compare the features of the top 5 AI coding assistants"

// Claude will call:
agent_execute({
  prompt: "Find and compare features of top AI coding assistants: GitHub Copilot, Cursor, Claude Code, Tabnine, and Codeium",
  schema: {
    type: "object",
    properties: {
      tools: {
        type: "array",
        items: {
          type: "object",
          properties: {
            name: { type: "string" },
            features: { type: "array", items: { type: "string" } },
            pricing: { type: "string" }
          }
        }
      }
    }
  }
})
```

### Example 4: Long-Running Research

```typescript
// Ask Claude Code:
"Start a deep research job on quantum computing breakthroughs in 2024"

// Claude will call:
const job = await agent_start({
  prompt: "Research all major quantum computing breakthroughs and papers published in 2024"
})

// Then poll for status:
const status = await agent_status({ jobId: job.jobId })
```

## Cost Management

Firecrawl Agent uses dynamic billing based on task complexity:
- Simple extractions: Fewer credits
- Complex research: More credits

Control costs using:
```typescript
{
  prompt: "Your task",
  maxCredits: 100  // Limit spending to 100 credits
}
```

## Development

### Watch Mode

```bash
npm run dev
```

### Run Directly

```bash
npm start
```

### SSE Transport Mode

For HTTP-based communication:

```bash
npm run start:sse
```

## Troubleshooting

### "FIRECRAWL_API_KEY environment variable is required"

Make sure you've:
1. Created a `.env` file with your API key
2. Or configured the env variable in your Claude Code settings

### "HTTP 401: Unauthorized"

Your API key is invalid. Get a new one from https://www.firecrawl.dev/

### "HTTP 429: Too Many Requests"

You've hit rate limits. Wait a moment and try again, or upgrade your Firecrawl plan.

### Tools not showing up in Claude Code

1. Make sure you've built the server: `npm run build`
2. Check that the path in your MCP configuration is correct
3. Restart Claude Code after configuration changes

## Learn More

- [Firecrawl Agent Documentation](https://docs.firecrawl.dev/features/agent)
- [Firecrawl API Reference](https://docs.firecrawl.dev/api-reference/introduction)
- [MCP Protocol Specification](https://modelcontextprotocol.io/)
- [Introducing Firecrawl Agent Blog Post](https://www.firecrawl.dev/blog/introducing-agent)

## License

MIT

## Support

For issues with:
- **This MCP server**: Open an issue in this repository
- **Firecrawl API**: Contact Firecrawl support
- **Claude Code**: Visit https://github.com/anthropics/claude-code

---

Built with ā¤ļø using the [Model Context Protocol](https://modelcontextprotocol.io/)

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no ambiguity: agent_execute for immediate agent tasks, agent_start for async jobs, agent_status for job monitoring, scrape for single URLs, and search for web searches. The descriptions explicitly differentiate use cases, preventing misselection.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with clear verb_noun or noun_verb structures (e.g., agent_execute, agent_start, scrape, search). There are no deviations in naming conventions, making the set predictable and readable.

Tool Count5/5

With 5 tools, the server is well-scoped for web data extraction and agent tasks. Each tool earns its place by covering distinct aspects: synchronous and asynchronous agent execution, job monitoring, single-page scraping, and multi-source search. This count is neither too sparse nor bloated.

Completeness4/5

The tool surface covers core workflows for web scraping and agent-based data gathering, including start, execute, status, scrape, and search operations. A minor gap exists in lacking explicit tools for managing or canceling async jobs, but agents can work around this by using the provided tools effectively.