Clay.com MCP Server
by bpw-civic
README.md
# Clay.com MCP Server
MCP (Model Context Protocol) server for Clay.com API integration, providing people and company enrichment tools.
## Features
- **People Search & Enrichment**: Find and enrich people by title, company, industry, location
- **Company Search & Enrichment**: Find and enrich companies by industry, technology, funding, size
- **Clay Tables**: List, query, and explore your Clay workspace tables
## Installation
```bash
npm install @civic-wisdom/clay-mcp
```
Or clone and build from source:
```bash
git clone https://github.com/bpw-civic/clay-mcp-server.git
cd clay-mcp-server
npm install
npm run build
```
## Configuration
Set your Clay API key as an environment variable:
```bash
export CLAY_API_KEY=your-api-key-here
```
## Usage
### With Claude Code
Add to your `.claude/settings.json` or `.mcp.json`:
```json
{
"mcpServers": {
"clay": {
"command": "node",
"args": ["node_modules/@civic-wisdom/clay-mcp/dist/index.js"],
"env": {
"CLAY_API_KEY": "${CLAY_API_KEY}"
}
}
}
}
```
Or if installed from source:
```json
{
"mcpServers": {
"clay": {
"command": "node",
"args": ["/path/to/clay-mcp-server/dist/index.js"],
"env": {
"CLAY_API_KEY": "${CLAY_API_KEY}"
}
}
}
}
```
### With Other MCP Clients
The server communicates via stdio. Start it with:
```bash
CLAY_API_KEY=your-key node dist/index.js
```
## Available Tools
### People Tools
#### `clay_search_people`
Search for people matching specific criteria.
**Parameters:**
- `query` (string, optional): Natural language search query
- `filters` (object, optional):
- `titles`: Array of job titles
- `companies`: Array of company names
- `industries`: Array of industries
- `locations`: Array of locations
- `companySize`: Company size range (e.g., "51-200")
- `seniorityLevels`: Array of seniority levels
- `limit` (number, default 25): Maximum results
**Example:**
```json
{
"query": "ML engineers",
"filters": {
"industries": ["Technology", "AI"],
"companySize": "51-200"
},
"limit": 10
}
```
#### `clay_enrich_person`
Get full enrichment data for a specific person.
**Parameters (at least one required):**
- `email`: Email address
- `linkedinUrl`: LinkedIn profile URL
- `fullName` + `company`: Name and company combo
**Example:**
```json
{
"email": "jane@example.com"
}
```
**Returns:**
- Full name, title, company
- Work experience history
- Education
- Skills
- Social profiles (LinkedIn, Twitter, GitHub)
- Location details
- Contact information
### Company Tools
#### `clay_search_companies`
Search for companies matching specific criteria.
**Parameters:**
- `query` (string, optional): Natural language search query
- `filters` (object, optional):
- `industries`: Array of industries
- `technologies`: Array of technologies
- `employeeCount`: Size range (e.g., "51-200")
- `fundingStage`: Funding stage (e.g., "series_a")
- `location`: Location string
- `foundedAfter`: Year (number)
- `foundedBefore`: Year (number)
- `limit` (number, default 25): Maximum results
**Example:**
```json
{
"filters": {
"industries": ["AI", "Machine Learning"],
"fundingStage": "series_a",
"location": "San Francisco"
}
}
```
#### `clay_enrich_company`
Get full enrichment data for a specific company.
**Parameters (at least one required):**
- `domain`: Company domain
- `name`: Company name
- `linkedinUrl`: Company LinkedIn URL
**Example:**
```json
{
"domain": "anthropic.com"
}
```
**Returns:**
- Company name, domain, description
- Industry classification
- Employee count and range
- Founding year
- Location details
- Funding information (total raised, last round, investors)
- Technographics (technologies used)
- Social profiles
- Recent news
### Table Tools
#### `clay_list_tables`
List all Clay tables in your workspace.
**Parameters:** None
**Returns:** List of tables with ID, name, description, row count, and timestamps.
#### `clay_get_table_schema`
Get the schema for a specific table.
**Parameters:**
- `tableId` (required): Table ID
**Returns:** Table metadata and column definitions (name, type, description).
#### `clay_query_table`
Query a Clay table with filters.
**Parameters:**
- `tableId` (required): Table ID
- `filters` (object, optional): Filter conditions
- `sort` (object, optional): Sort configuration
- `column`: Column name
- `order`: "asc" or "desc"
- `limit` (number, default 50): Maximum results
- `offset` (number, default 0): Pagination offset
**Example:**
```json
{
"tableId": "tbl_abc123",
"filters": { "status": "active" },
"sort": { "column": "created_at", "order": "desc" },
"limit": 25
}
```
## Resources
The server exposes Clay tables as MCP resources:
- `clay://tables` - List all tables
- `clay://tables/{id}/schema` - Table schema
## Development
```bash
# Install dependencies
npm install
# Watch mode (rebuild on changes)
npm run dev
# Type check
npm run typecheck
# Build for production
npm run build
# Run the server
npm start
```
## Error Handling
The server handles:
- **Rate limiting** (429 responses) with retry information
- **API errors** with descriptive messages
- **Missing authentication** with clear error message
- **Invalid parameters** with validation feedback
## Requirements
- Node.js 18+
- Clay.com API key ([Get one here](https://app.clay.com/settings/api))
## API Reference
This server uses the Clay.com REST API:
- Base URL: `https://api.clay.com/v1`
- Authentication: API key in `X-Api-Key` header
For Clay.com API documentation, visit: https://docs.clay.com/api
## License
MIT License - see [LICENSE](LICENSE) file.
TDQS
A3.7/5.0
Scored across 7 tools
Disambiguation5/5
Each tool serves a distinct purpose: enrichment for companies/persons, table metadata, and search. There is no overlap or ambiguity between tool functionalities.
Naming Consistency5/5
All tools follow a consistent 'clay_{verb}_{noun}' pattern using snake_case, making the action and target clear in every name.
Tool Count5/5
With 7 tools, the set is well-scoped for the domain of enrichment, table management, and search, providing essential operations without unnecessary bloat.
Completeness3/5
The tools cover enrichment, search, and table schema/querying, but lack write operations (e.g., create/update/delete) for tables or data, which may limit full workflow coverage.
Maintenance
ActivityInactive
ResponsivenessUnresponsive