Connect Seamless.AI to Claude: Find, Enrich and Export Company Data
Learn how to connect Seamless.AI to Claude using a managed MCP server. Execute complex B2B prospecting, async enrichment, and contact exports via natural language.
If you need to connect Seamless.AI to Claude to automate B2B prospecting, execute asynchronous data enrichment, or synchronize target account lists, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's function-calling capabilities and the Seamless.AI REST APIs. You can either build and maintain this infrastructure yourself, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL.
If your team uses ChatGPT, check out our guide on /connect-seamless-ai-to-chatgpt-prospect-research-and-sync-leads/ or explore our broader architectural overview on /connect-seamless-ai-to-ai-agents-automate-b2b-search-and-enrichment/.
Giving a Large Language Model (LLM) read and write access to a high-volume data vendor like Seamless.AI introduces strict architectural requirements. You must manage complex asynchronous polling loops, navigate dynamic pagination limits tied to account credits, and format complex array-based query parameters. Every time an endpoint changes or a new filter category is added, you have to update your server code, redeploy, and test the integration.
This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Seamless.AI, connect it natively to Claude Desktop, and execute complex prospecting workflows using natural language.
The Engineering Reality of the Seamless.AI API
A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against specialized B2B APIs is painful. You are not just integrating a simple database - you are integrating an economic system where API calls consume credits, requests happen asynchronously, and temporal limits are strictly enforced.
If you decide to build a custom MCP server for Seamless.AI, here are the specific integration challenges your engineering team will face:
Async Polling and Disconnected Schemas
Seamless.AI separates the discovery of data from the enrichment of data. When you execute a search, you receive lightweight results containing basic firmographics and a searchResultId. To get verified emails, phone numbers, and full intelligence, you must submit that ID to a "research" endpoint. This endpoint does not return the data; it queues a background job and returns a requestId. You must then continuously poll a separate "researches" endpoint until the status transitions from queued or researching to done. Building an MCP server means writing strict JSON schemas that teach Claude how to bridge these three distinct API domains without hallucinating the workflow.
Dynamic Credit-Based Pagination
Most SaaS APIs use strict limits - if you ask for 500 records and there are 500 records, you get 500 records. Seamless.AI search endpoints cost 1 credit per 10 results. If an organization's credit balance cannot cover the requested limit, the API does not reject the request or throw a 402 Payment Required error. Instead, it dynamically shortens the returned page to exactly what the balance can pay for. If your orchestration layer assumes fixed page sizes for cursor logic, your agent will silently miss data when credits run low.
Strict Temporal Constraints and 400 Errors
The Seamless.AI historical endpoints (list_all_seamless_ai_companies and list_all_seamless_ai_contacts) enforce a hard 30-day window on startDate and endDate queries. If an LLM attempts to pull a quarter's worth of historical saves by calculating a 90-day window, the API rejects the request entirely with a 400 Bad Request: Dates times are invalid. Your MCP tools must carry explicit instructional prompts embedded in their descriptions to warn the LLM against requesting wide temporal ranges.
Array Serialization in Query Parameters
Many APIs expect complex filters in a JSON request body. Seamless.AI search filters require bracket-array query parameters appended to the URL (e.g., ?companyName []=Salesforce&industry []=Software). If your MCP server does not correctly parse the LLM's flat JSON arguments into URL-encoded bracket arrays, the upstream API will ignore the filters and return unstructured global results.
Rate Limits and Header Normalization
When operating LLMs against external APIs, rate limiting is inevitable. It is critical to note that Truto does not retry, throttle, or apply backoff on rate limit errors. When the Seamless.AI API returns an HTTP 429, Truto passes that error directly back to the caller. However, Truto normalizes the upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) following the IETF specification. The caller - whether that is your custom LangGraph agent or Claude Desktop - is strictly responsible for implementing its own retry and backoff logic using these headers.
Generating the Managed MCP Server
Instead of building authentication middleware, protocol handlers, and JSON Schema definitions from scratch, Truto dynamically derives an MCP server directly from the documentation and OpenAPI specifications of your connected Seamless.AI account.
Each MCP server is securely scoped to a single integrated account and is accessed via a cryptographic token URL. You can generate this server via the Truto dashboard or programmatically via the API.
Method 1: Via the Truto UI
For internal teams and quick deployments, the UI is the fastest path to a working server.
- Log into your Truto dashboard and navigate to Integrated Accounts.
- Select your connected Seamless.AI integration.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Configure your security filters (such as limiting the server to read-only methods or specific tool tags).
- Copy the generated MCP server URL (e.g.,
https://api.truto.one/mcp/a1b2c3d4e5f6...).
Method 2: Via the Truto API
For production deployments where you need to provision MCP servers dynamically for your own end-users, you can use the Truto API.
Send a POST request to /integrated-account/:id/mcp with your desired configuration:
// POST https://api.truto.one/integrated-account/<seamless-ai-account-id>/mcp
// Headers: Authorization: Bearer <Truto_API_Token>
{
"name": "Seamless_AI_Prospecting_Agent",
"config": {
"methods": ["read", "write", "custom"],
"require_api_token_auth": false
},
"expires_at": "2026-12-31T23:59:59Z"
}The response will include the secure URL required to connect Claude. The token in this URL is cryptographically hashed at the edge before storage; the raw token is never stored in a database, ensuring complete credential isolation.
Connecting the MCP Server to Claude
Once you have your MCP server URL, connecting it to Claude requires zero additional coding. The MCP protocol handles the initialization handshake, exchanging tool schemas and capabilities automatically.
Method A: Via the Claude UI (or ChatGPT)
If you are using a commercial LLM interface that supports remote MCP connections:
- Open your LLM client settings (e.g., in Claude: Settings -> Integrations -> Add MCP Server).
- Provide a recognizable name (e.g., "Seamless.AI via Truto").
- Paste the Truto MCP URL into the connection field.
- Click Add or Connect.
The client will execute a POST to the URL, complete the JSON-RPC 2.0 handshake, and instantly populate the model's context with the Seamless.AI tools.
Method B: Via Manual Config File
If you are using Claude Desktop locally and prefer file-based configuration, you can add the server as a Server-Sent Events (SSE) connection using the official npx connector.
Locate your claude_desktop_config.json file (typically at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows) and add the following:
{
"mcpServers": {
"seamless_ai": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/a1b2c3d4e5f6..."
]
}
}
}Restart Claude Desktop. The model will automatically read the config and request the tool list.
Security and Access Control
Giving an LLM direct access to an API that consumes paid credits requires strict guardrails. Truto provides four primary mechanisms to secure your managed MCP server:
- Method Filtering: You can restrict the MCP server config to specific operation types. By setting
methods: ["read"], Claude can list and search records but is physically blocked from callingcreate_a_seamless_ai_contacts_research, preventing the LLM from spending enrichment credits. - Tag Filtering: Resources can be grouped by tags. You can limit the server to only expose tools tagged with
companies, hiding all contact-level endpoints from the model's context. - Expiration Tracking (
expires_at): You can assign an ISO datetime to the server. Truto's distributed alarm scheduler will automatically invalidate the edge token and delete the server when the time expires, perfect for temporary agent tasking. - Secondary Authentication (
require_api_token_auth): By default, the cryptographically secure token in the URL is sufficient to execute tools. For enterprise environments, setting this flag totrueforces the MCP client to also pass a valid Truto API token in the Authorization header, preventing leaked URLs from being abused.
Hero Tools for Seamless.AI
Truto dynamically translates the entire Seamless.AI API surface into discrete, strongly-typed MCP tools. Here are the highest-leverage tools available for AI agent workflows.
1. list_all_seamless_ai_search_companies
This tool allows Claude to query the Seamless.AI global database for target accounts. Because Truto handles the complex bracket-array serialization internally, the LLM can simply provide a flat JSON arguments object containing the target industries, revenue ranges, or technologies.
"Search Seamless.AI for software companies located in California with an annual revenue over $50M that use Salesforce. Limit the results to 20 to preserve our search credits."
2. list_all_seamless_ai_search_contacts
Once target companies are identified, this tool searches for specific buyer personas within those organizations. It maps to the /search/contacts endpoint and returns unverified prospect records containing a critical searchResultId.
"Using the company domains we just found, search Seamless.AI for contacts holding C-Level or VP seniority in the Engineering department. Return a maximum of 50 results."
3. create_a_seamless_ai_contacts_research
This is the mutation tool that actually spends enrichment credits. It takes the searchResultIds gathered from the search tool and submits them to the async enrichment queue to find verified emails and direct dials.
"Take the 15 Vice Presidents of Engineering we found in the previous search, extract their searchResultIds, and submit them to the contacts research endpoint for enrichment. Give me the request IDs returned."
4. list_all_seamless_ai_contacts_researches
This polling tool is the final step in the enrichment loop. Claude uses the request IDs returned from the creation tool to check the status of the async jobs. When the status reads done, this tool returns the fully enriched contact record.
"Check the research status for the 15 request IDs we just generated. If any are marked 'done', extract their verified email addresses and output them as a markdown table."
5. list_all_seamless_ai_companies
Unlike the global search endpoint, this tool queries the list of companies already saved to your organization's Seamless.AI instance. It requires a strict 30-day temporal window.
"Fetch all the companies saved to our Seamless.AI organization between October 1st and October 25th. Remember that the start and end dates cannot span more than 30 days."
6. list_all_seamless_ai_location_filter_values
Because Seamless.AI requires specific string matches for location filters, this tool acts as a helper utility. It allows Claude to look up the exact internal location ID or standardized string for a geographic region before executing a massive contact search.
"Look up the exact Seamless.AI location filter values for 'San Francisco Bay Area' so we can use the correct terminology in our next contact search."
For a complete breakdown of every available endpoint, schema requirement, and required parameter, visit the Seamless.AI integration page.
Workflows in Action
MCP servers transform LLMs from passive text generators into active operational engines. Here is exactly how Claude orchestrates Seamless.AI tools to solve real B2B go-to-market challenges.
Workflow 1: The Autonomous Prospecting Engine
An SDR needs to build a highly targeted list of decision-makers at fast-growing fintech startups and instantly verify their contact information.
"Find 10 fintech companies in New York. For those companies, find contacts with the job title 'Chief Information Security Officer' or 'CISO'. Submit those contacts for enrichment, poll the system until the research is complete, and generate a final CSV-formatted list of their names, companies, and verified emails."
Execution Sequence:
list_all_seamless_ai_search_companies: Claude queries the database usingindustry: ["Financial Services", "Technology"]andcity: ["New York"].list_all_seamless_ai_search_contacts: Claude extracts the company names/domains and executes a secondary search usingjobTitle: ["Chief Information Security Officer", "CISO"].create_a_seamless_ai_contacts_research: Claude packages the resultingsearchResultIdsand executes a write operation to trigger the enrichment jobs, consuming account credits.list_all_seamless_ai_contacts_researches: Claude enters a brief polling loop. It checks the request IDs until the payload status shifts todone, retrieves the enriched email data, and formats the output for the user.
sequenceDiagram
participant User
participant Claude as Claude Desktop
participant MCP as Truto MCP Server
participant Seamless as Seamless.AI API
User->>Claude: "Find NY Fintech CISOs and enrich them"
Claude->>MCP: Call list_all_seamless_ai_search_companies
MCP->>Seamless: GET /search/companies?city[]=New York...
Seamless-->>MCP: Company Results
MCP-->>Claude: JSON Array
Claude->>MCP: Call list_all_seamless_ai_search_contacts
MCP->>Seamless: GET /search/contacts?companyName[]=...
Seamless-->>MCP: Contact Results (searchResultIds)
MCP-->>Claude: JSON Array
Claude->>MCP: Call create_a_seamless_ai_contacts_research
MCP->>Seamless: POST /research/contacts
Seamless-->>MCP: Job Created (requestIds)
MCP-->>Claude: JSON Array
loop Polling
Claude->>MCP: Call list_all_seamless_ai_contacts_researches
MCP->>Seamless: GET /research/contacts
Seamless-->>MCP: Status: done + Emails
MCP-->>Claude: Enriched Data
end
Claude-->>User: Markdown / CSV OutputWorkflow 2: Internal CRM Audit
A Revenue Operations manager needs to cross-reference recent Seamless.AI activity to ensure SDRs are targeting the correct demographics before those records are synced to Salesforce.
"Pull all the contacts that our team has saved in Seamless.AI over the last 14 days. Analyze the data and give me a breakdown of which industries and seniority levels are being saved the most."
Execution Sequence:
list_all_seamless_ai_contacts: Claude calculates the exact date 14 days ago to comply with the strict 30-day temporal limitation. It passes thestartDateandendDateto the historical saves endpoint.- Local Analysis: Claude receives the un-paginated array of historical contacts (up to 500 records), processes the
industriesandseniorityarrays within the JSON payload, and aggregates the counts. - Output Generation: Claude generates a structured report summarizing the team's prospecting behavior over the last two weeks.
Strategic Architecture for AI Integrations
Connecting an LLM to Seamless.AI via a managed MCP server removes the friction of maintaining an active API integration layer. Instead of writing custom TypeScript polling loops, managing edge KV storage for OAuth tokens, or hardcoding bracket-array serializers for query parameters, your engineering team can treat the integration as a simple configuration URL.
By normalizing the upstream schemas, automatically enforcing documentation requirements, and standardizing error handling - including IETF rate limit headers - Truto ensures that your AI agents interact with third-party data predictably. The result is an autonomous workflow that can discover accounts, execute credit-based enrichment, and poll for intelligence, all driven entirely by natural language.
FAQ
- How does Claude authenticate with the Seamless.AI API?
- Claude connects to a managed Model Context Protocol (MCP) server provided by Truto. The MCP server securely holds the underlying OAuth or API credentials for Seamless.AI, and Claude authenticates to the server using a cryptographically secure token embedded in the server URL.
- Does Truto automatically handle Seamless.AI rate limits for Claude?
- No. Truto passes HTTP 429 rate limit errors directly back to the caller while normalizing the upstream headers into standard IETF formats (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The MCP client or LLM orchestration framework is responsible for implementing retry and backoff logic.
- Why do some Seamless.AI search tools return fewer results than the limit requested?
- Seamless.AI search endpoints cost credits. If your organization's available credit balance is lower than the requested pagination limit, the API dynamically shortens the returned page to match what your balance can cover, rather than rejecting the request.
- Can I restrict Claude to only reading data from Seamless.AI?
- Yes. When generating the MCP server, you can apply method filtering to restrict available tools to 'read' operations, completely preventing Claude from mutating data or spending bulk research credits.