Built for agents, not just apps.
openappend ships as an MCP server, so Claude and any MCP-capable agent can query ~971M phones and 380.8M people conversationally — discover the schema, size an audience for free, then pull only the records it commits to. Generate your config below, or point a crawler at /llms.txt.
MCP server config
Add this to your claude_desktop_config.json, then restart Claude Desktop.
{
"mcpServers": {
"openappend": {
"command": "npx",
"args": [
"-y",
"@openappend/mcp"
],
"env": {
"OPENAPPEND_API_KEY": "oa_live_YOUR_API_KEY",
"OPENAPPEND_BASE_URL": "https://api.openappend.com/v1"
}
}
}
}
What the agent gets
| MCP tool | REST endpoint | Cost | Purpose |
|---|---|---|---|
| people_fields | GET/v1/fields | FREE | Discover every filterable + returnable field before building a query. |
| people_count | POST/v1/people/count | FREE | Size an audience. Free — dial filters until the count is right. |
| people_search | POST/v1/people/search | METERED | Return matching records. reveal:false is free; reveal:true bills per record. |
| email_to_phone | POST/v1/email-to-phone | METERED | Reverse an email to callable, DNC-scored phones. 1 credit per hit. |
| phone_to_email | POST/v1/phone-to-email | METERED | Reverse a phone to email(s). 1 credit per hit, misses free. |
How an agent should drive it
Three moves, in order. The whole point of people_fields is that an agent that can read it can compose any count or search — no hard-coded schema.
- 1
Install the MCP server
Use the generator above, or add it in one line:
bashclaude mcp add openappend \ --env OPENAPPEND_API_KEY=oa_live_… \ -- npx -y @openappend/mcp - 2
Discover the fields
The agent calls people_fields first to learn what it can filter and return — categories, operators, and ordinal bands — then composes from that.
system nudgebash# What an agent tells the model: Use openappend. First call people_fields to learn the schema, then people_count to size, then people_search with reveal:false to qualify before spending a credit.tool calljson{ "tool": "people_fields", "arguments": {} } - 3
Count free, then reveal what you commit to
Size the audience for $0, qualify with reveal:false (records + contact counts, still $0), then flip reveal:true to pull contacts — billed only for the records you actually take.
1 · count (free)json{ "tool": "people_count", "arguments": { "filters": { "state": "IL", "city": "Chicago", "age": { "between": [30, 55] }, "home_owner": true, "line_type": "mobile", "dnc": false } } } // → { "data": { "count": 128450 }, "meta": { "credits_used": 0, ... } }2 · qualify → revealjson{ "tool": "people_search", "arguments": { "filters": { "state": "IL", "city": "Chicago", "line_type": "mobile", "dnc": false }, "fields": ["first_name", "last_name", "address", "phone_count"], "reveal": false, "limit": 100 } } // reveal:false → qualifying fields + contact COUNTS, $0. // Re-run with "reveal": true to pull contacts — 1 credit per record.