
Resolve 1-50 company identifiers (domain, website, LinkedIn/Crunchbase/Pitchbook URL, or name) to Specter company IDs. Free. Returns one match group per input, in order. Use this first to get a companyid for getcompany and the other company tools; use enrich_company instead when you want the full record in one paid call.
Look up and return full company records by one known identifier (website, domain, LinkedIn URL or ID, Crunchbase or Pitchbook URL). 1 credit per match; a domain can match several companies; no match returns an empty list. Use getcompany when you already have a companyid, and enrichcompaniesbulk for up to 50 lookups at once.
Enrich up to 50 companies in one call, each lookup carrying one known identifier (website, domain, LinkedIn, Crunchbase, Pitchbook). 1 credit per match; unmatched lookups are omitted, so fewer records may come back. Use enrichcompany for a single lookup, or getcompany when you already have a company_id.
Get the full current Specter record for one company by companyid: profile, HQ, funding, team, web traffic, reviews, socials and traction metrics. 1 credit. Use findcompanyid or searchentities to get a company_id. A merged company raises an error naming the surviving ID.
Get a company's latest reported and estimated revenue with low/high range and 1m-2y growth percentages. 1 credit. Use findcompanyid or searchentities to get a companyid; use getcompanyrevenue_signals for the dated history of revenue observations instead.
Get a company's latest reported and estimated valuation with low/high range and 1m-2y growth percentages. 1 credit. Use findcompanyid or searchentities to get a companyid; use getcompanyfunding_rounds for per-round pre/post-money valuations.
List one company's funding rounds, newest first, with every participating investor and a lead flag; filter by announcement date; paginated (page/limit, max 50). Use findcompanyid or searchentities to get a companyid. Use listfundingrounds for rounds across all companies.
List one company's news signals (articles with detected revenue, funding, deal or traction updates), filter by publication date or major news only; paginated (page/limit, max 50). Use findcompanyid or searchentities to get a companyid.
List one company's revenue and profitability signals (ARR/Revenue/GMV observations from news, social and public filings), filter by signal date; paginated (page/limit, max 1000); 2 credits per result. Use findcompanyid to get a companyid; getcompanylatestrevenue for the current estimate.
List the acquisitions one company is part of, as acquirer or acquiree (each row carries both sides), newest first; filter by deal date; paginated (page/limit, max 50). Use findcompanyid or searchentities to get a companyid; use list_acquisitions for deals across all companies.
List one company's IPOs (usually zero or one; dual-listed companies may have more), newest first, with exchange, ticker, share price and amount raised; paginated (page/limit, max 50). Use findcompanyid to get a companyid; use listipos for IPOs across all companies.
List the founders and employees Specter has for one company, with title, department, seniority and socials; filter by department, founders, CEO or key people; paginated (page/limit, max 50). Use findcompanyid to get a companyid; pass a returned personid to get_person for a full profile.
Get the competitive landscape for one company: up to 30 ranked competitors with scores, the market dimensions they split on, and a summary. 1 credit; a never-analysed company is computed on demand and is slower. Use findcompanyid or searchentities to get a companyid.
List the investor-interest signals about one company (which investors are paying attention), newest first; filter by signal date; paginated (page/limit, max 50). Use findcompanyid to get a companyid; use listinterestsignals for the cross-company feed, getinvestorinterestsignals per investor.
List talent signals across all people (founders leaving, new stealth companies, job moves), newest first, each with the person's profile; filter by signal date; paginated (page/limit, max 50); 1 credit per result. Use getpersontalentsignals for one person, gettalentsearchresults for a saved search.
List investor-interest signals (investors showing interest in a company or person), newest first, dataset-wide or scoped to a saved searchid (listsavedsearches) or a listid (listcompanylists, listpeoplelists or listinvestorlists); filter by date; optional sort; paginated (page/limit). 1 credit per result.
List revenue and profitability signals across all companies (ARR/Revenue/GMV figures from news, social and public filings), newest first; filter by signal date; paginated (page/limit, max 5000); 2 credits per result. Use getcompanyrevenue_signals for a single company.
List funding rounds across all companies, newest first, each with amount, valuations and every investor (lead flagged); filter by announcement date; paginated (page/limit, max 50). Use getcompanyfundingrounds or getinvestorfundingrounds to scope to one company or investor.
Get one funding round by fundingroundid: the raising company, amount, pre/post-money valuation and every participating investor with a lead flag. 1 credit. Use listfundingrounds, getcompanyfundingrounds or getinvestorfundingrounds to find a fundingroundid.
List acquisitions across all companies, newest first, each with both acquirer and acquiree (company IDs, domains), deal type and price; filter by deal date; paginated (page/limit, max 50). Use getcompanyacquisitions to scope to one company, get_acquisition for one deal.
Get one acquisition by acquisitionid, covering both sides of the deal (acquirer and acquiree with company IDs and domains), deal type, price and date. 1 credit. Use listacquisitions or getcompanyacquisitions to find an acquisition_id.
List IPOs across all companies, newest first, with exchange, ticker, share price, valuation and amount raised plus the issuing companyid; filter by listing date; paginated (page/limit, max 50). Use getcompanyipos for one company, getipo for one IPO.
Get one IPO by ipoid: exchange, ticker, listing date, share price, valuation, amount raised and the issuing company's companyid and domain. 1 credit. Use listipos or getcompanyipos to find an ipoid; pass the companyid to getcompany for the issuer.
Resolve 1-50 investor websites and/or names to Specter investor IDs with candidate details (website, HQ, founded year) to disambiguate. Free; one match group per input, in order. Use this to get an investorid for getinvestor; use enrich_investor to get full records in one paid call.
Look up investors by website (domain), name, or both and return full investor records: profile, activity counts, stage/industry targeting, funds and portfolio. 1 credit per match; may return several. Use getinvestor when you already have an investorid; enrichinvestorsbulk for up to 50.
Enrich up to 50 investors in one call, each lookup carrying a website and/or name, returning full investor records. 1 credit per match; unresolved lookups are omitted and order is not guaranteed. Use enrichinvestor for a single lookup or getinvestor when you already have an investor_id.
Get the full Specter record for one investor by investorid: profile, activity counts, stage and industry targeting, funds and portfolio company IDs. 1 credit. Use findinvestorid or searchentities to get an investorid; pass portfolio IDs to getcompany.
List the funding rounds one investor took part in, newest first, each with the raising company and all co-investors; filter by announcement date; paginated (page/limit, max 50). Use findinvestorid or searchentities to get an investorid; use listfundingrounds for all rounds.
List the investor-interest signals one investor generated (the companies and people it is paying attention to), newest first; filter by signal date; paginated (page/limit, max 50). Use findinvestorid to get an investorid; getcompanyinterestsignals for signals about a company.
List the company lists reachable from your API key (created via the API, shared to the API, or global lists curated by Specter) with id, name, sharing and member count. Free. Use this to get a listid for getcompanylist, updatecompanylist, deletecompanylist or getcompanylistresults.
Create a new company list shared with the API, optionally seeded with companies IDs (use findcompanyid or searchentities to get them), and return its listid. A duplicate name raises a conflict (LISTALREADYEXISTS). Free. Add or remove members later with updatecompanylist.
Get one company list by listid: name, sharing settings, timestamps and the IDs of the companies in it with when each was added. Free. Use listcompanylists to get a listid; use getcompanylist_results for the members' records (lean by default; pass fields=['all'] for full records).
Add and/or remove companies in an existing company list in one call (adds run first, so an ID in both ends up removed). Free. Use listcompanylists to get the listid and findcompanyid or searchentities for IDs to add; use getcompanylist to see current members.
Permanently delete a company list and all its data; it is removed from users' lists and cannot be undone. Only lists shared with the API can be deleted. Free. Use listcompanylists to get the list_id.
Read the companies in a company list; paginated (page/limit, max 5000). Returns a lean field set by default; pass fields=['all'] for full records or a field list to select more. 1 credit per result. Use listcompanylists to get a listid; use getcompany_list for the cheaper member-ID view.
List the investor lists reachable from your API key (created via the API, shared to the API, or global lists curated by Specter) with id, name, sharing and member count. Free. Use this to get a listid for getinvestorlist, updateinvestorlist, deleteinvestorlist or getinvestorlistresults.
Create a new investor list shared with the API, optionally seeded with investors IDs (use findinvestorid or searchentities to get them), and return its listid. A duplicate name raises a conflict (LISTALREADYEXISTS). Free. Add or remove members later with updateinvestorlist.
Get one investor list by listid: name, sharing settings, timestamps and the IDs of the investors in it with when each was added. Free. Use listinvestorlists to get a listid; use getinvestorlist_results for the members' records (lean by default; pass fields=['all'] for full records).
Add and/or remove investors in an existing investor list in one call (adds run first, so an ID in both ends up removed). Free. Use listinvestorlists to get the listid and findinvestorid or searchentities for IDs to add; use getinvestorlist to see current members.
Permanently delete an investor list and all its data; it is removed from users' lists and cannot be undone. Only lists shared with the API can be deleted. Free. Use listinvestorlists to get the list_id.
Read the investors in an investor list; paginated (page/limit, max 5000). Returns a lean field set by default; pass fields=['all'] for full records or a field list to select more. 1 credit per result. Use listinvestorlists to get a listid; use getinvestor_list for the cheaper member-ID view.
List the people lists reachable from your API key (created via the API, shared to the API, or global lists curated by Specter) with id, name, sharing and member count. Free. Use this to get a listid for getpeoplelist, updatepeoplelist, deletepeoplelist or getpeoplelistresults.
Create a new people list shared with the API, optionally seeded with people IDs (use findpersonid or searchentities to get them), and return its listid. A duplicate name raises a conflict (LISTALREADYEXISTS). Free. Add or remove members later with updatepeoplelist.
Get one people list by listid: name, sharing settings, timestamps and the IDs of the people in it with when each was added. Free. Use listpeoplelists to get a listid; use getpeoplelist_results for the members' records (lean by default; pass fields=['all'] for full records).
Add and/or remove people in an existing people list in one call (adds run first, so an ID in both ends up removed). Free. Use listpeoplelists to get the listid and findpersonid or searchentities for IDs to add; use getpeoplelist to see current members.
Permanently delete a people list and all its data; it is removed from users' lists and cannot be undone. Only lists shared with the API can be deleted. Free. Use listpeoplelists to get the list_id.
Read the people in a people list; paginated (page/limit, max 5000). Returns a lean field set by default; pass fields=['all'] for full records or a field list to select more. 1 credit per result. Use listpeoplelists to get a listid; use getpeople_list for the cheaper member-ID view.
List everyone your team is connected to on LinkedIn, deduped across teammates, with which teammates hold each connection and the person's current companyid; paginated (page/limit, max 50); 1 credit per page. Needs the LinkedIn integration. Use listnetwork_companies for a by-company view.
List the companies where people in your team's LinkedIn network currently work, most connections first, with the connected person IDs; filter by minimum connections; paginated (page/limit, max 50). Use getnetworkconnections for who you know at one company.
Get your team's connections at one company: who you know there, their roles, and which teammates are linked to them; paginated (page/limit, max 50). Raises not-found when you have no contacts there. Use listnetworkcompanies or findcompanyid to get a company_id.
List the active members of your Specter team with userid, role (admin or member), name and email; paginated (page/limit, max 1000). Free. Use this to see who owns saved searches (ownerid) or which teammates hold network connections.
Get your organization's API credit balance for the current billing window: limit, used, remaining, unlimited flag, and the daily cap and usage when one is set. Free and readable even when credits are spent. Check it before large paid jobs or after an out-of-credits error.
List the Specter API calls your organization made, newest first, with path, method, status, credits consumed and request ID; filter by a time window; paginated (page/limit, max 5000) with a total. Free. Use this to audit credit usage; use getcreditbalance for the remaining balance.
Check whether the Specter API is up and can reach its databases: status 'OK', or 'ERROR' when a backing database is unreachable. Free; needs no credits. Use this to tell a Specter outage apart from a credential problem (validatecredential) or credit exhaustion (getcredit_balance).
Resolve 1-50 LinkedIn identifiers (profile URL, vanity ID, numeric ID or URN) to Specter person IDs. Free; one match group per input, in order; unknown profiles get an empty match list and are not enriched. Use this to get a personid for getperson; use enrich_person to fetch a profile Specter lacks.
Resolve one email address to the most likely Specter person and return the full profile plus a match score (1-10; 7+ is reliable). 2 credits per match; found=false when nothing matches. Use enrichpeoplebyemailbulk for up to 50 emails, or getperson when you already have a personid.
Resolve up to 50 email addresses to Specter people in one call; each match is a full profile echoing the email it matched plus a score. 2 credits per match; unmatched emails are omitted and order is not guaranteed. Use enrichpersonby_email for a single address.
Get the full professional profile for one person by personid: career history, education, skills, languages, socials and signal IDs. 1 credit. Use findpersonid, searchentities or getcompanyemployees to get a personid; use enrichperson when you only have a LinkedIn identifier.
Get a contactable email for a person via a multi-provider waterfall, optionally only a personal or professional one. 2 credits per match; found=false when none of that type is on file. Use findpersonid or searchentities to get a personid.
Look up and enrich one person by a LinkedIn identifier (URL, vanity ID, numeric ID or URN). Returns the profile with status 'found', or status 'queued' when Specter starts enrichment (ready within ~24h; not charged). 1 credit per match. Use getperson when you already have a personid.
Enrich up to 50 people by LinkedIn identifier in one call. Rows come back in input order, each 'found' with the profile or 'queued' when enrichment started (not charged). 1 credit per match. Use enrichperson for one lookup, or getperson when you already have a person_id.
List one person's talent signals (job moves, new companies, stealth starts), newest first, with the profile at signal time; filter by signal date; paginated (page/limit, max 50). Use findpersonid or searchentities to get a personid; use listtalentsignals for the cross-person feed.
List the saved searches shared with the API across every product, each with id, name, producttype (company, people, investors, talent, stratintel, fundingrounds, acquisition, ipo), queryid and counts. Free. Use this to get a searchid, then call the get*searchresults tool matching producttype.
Save an aisearch query under a name so its results can be re-read later. Call aisearch first and pass its query_id. The product comes from the query; the search is shared with your team and owned by an admin. Free. A duplicate name fails with a conflict. Returns the new search id.
Permanently delete a saved search and its data; it disappears from users' saved searches and cannot be undone. Only searches shared with the API (and admin-owned) can be deleted. Free. Use listsavedsearches to get the search_id.
Get count-level details of one saved company search: name, queryid, owner and the number of companies matched and newly added (newcount). Free. Use listsavedsearches to get a searchid whose producttype is 'company'; use getcompanysearch_results to read the matching companies.
Read the companies matching a saved company search, or only those added since newresultsafter (poll for new matches); paginated (page/limit, max 5000); 1 credit per result. Returns a lean field set by default; pass fields=['all'] for full records or a field list to select more. Use listsavedsearches to get a searchid with producttype 'company'.
Get count-level details of one saved investor search: name, queryid, owner and the number of investors matched. Free. Use listsavedsearches to get a searchid whose producttype is 'investors'; use getinvestorsearchresults to read the matching investors.
Read the investors matching a saved investor search, or only those added since newresultsafter (poll for new matches); paginated (page/limit, max 5000); 1 credit per result. Returns a lean field set by default; pass fields=['all'] for full records or a field list to select more. Use listsavedsearches to get a searchid with producttype 'investors'.
Get count-level details of one saved people search: name, queryid, owner and the number of people matched. Free. Use listsavedsearches to get a searchid whose producttype is 'people'; use getpeoplesearchresults to read the matching people.
Read the people matching a saved people search, or only those added since newresultsafter (poll for new matches); paginated (page/limit, max 5000); 1 credit per result. Returns a lean field set by default; pass fields=['all'] for full records or a field list to select more. Use listsavedsearches to get a searchid with producttype 'people'.
Get count-level details of one saved talent signal search: name, queryid, owner and the number of talent signals matched. Free. Use listsavedsearches to get a searchid whose producttype is 'talent'; use gettalentsearchresults to read the matching talent signals.
Read the talent signals matching a saved talent signal search, filter by signal date, or only those added since newresultsafter (poll for new matches); paginated (page/limit, max 5000); 1 credit per result. Returns a lean field set by default; pass fields=['all'] for full records or a field list to select more. Use listsavedsearches to get a searchid with producttype 'talent'.
Get count-level details of one saved investor-interest search: name, queryid, owner and the number of investor-interest signals matched. Free. Use listsavedsearches to get a searchid whose producttype is 'stratintel'; use getinterestsearchresults to read the matching investor-interest signals.
Read the investor-interest signals matching a saved investor-interest search, filter by signal date, or only those added since newresultsafter (poll for new matches); paginated (page/limit, max 5000); 1 credit per result. Use listsavedsearches to get a searchid with producttype 'stratintel'.
Get count-level details of one saved funding round search: name, queryid, owner and the number of funding rounds matched. Free. Use listsavedsearches to get a searchid whose producttype is 'fundingrounds'; use getfundingroundsearchresults to read the matching funding rounds.
Read the funding rounds matching a saved funding round search, or only those added since newresultsafter (poll for new matches); paginated (page/limit, max 5000); 1 credit per result. Use listsavedsearches to get a searchid with producttype 'funding_rounds'.
Get count-level details of one saved acquisition search: name, queryid, owner and the number of acquisitions matched. Free. Use listsavedsearches to get a searchid whose producttype is 'acquisition'; use getacquisitionsearchresults to read the matching acquisitions.
Read the acquisitions matching a saved acquisition search, or only those added since newresultsafter (poll for new matches); paginated (page/limit, max 5000); 1 credit per result. Use listsavedsearches to get a searchid with producttype 'acquisition'.
Get count-level details of one saved IPO search: name, queryid, owner and the number of IPOs matched. Free. Use listsavedsearches to get a searchid whose producttype is 'ipo'; use getiposearchresults to read the matching IPOs.
Read the IPOs matching a saved IPO search, or only those added since newresultsafter (poll for new matches); paginated (page/limit, max 5000); 1 credit per result. Use listsavedsearches to get a searchid with producttype 'ipo'.
Fuzzy-search one name across companies, people and investors in one free call; matches are grouped by type with a matchconfidence and carry the companyid, personid or investorid other tools take. Use this when you only have a name; use ai_search for descriptive queries like 'fintech in Germany'.
Search Specter with a plain-English query (e.g. 'Series A climate startups in Europe'); returns matching companies, people, investors, signals or transactions plus a queryid and total. Pass the queryid to createsavedsearch to save it. 1 credit per 5 results. Use search_entities for a name lookup.
Validate the Specter API key by reading the organization's credit balance, a free authenticated call. Returns success and a message. Use this first to confirm the key works before running other tools; use getcreditbalance to read the balance itself.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now