MCP server
Monial exposes the same data layer over the Model Context Protocol. Point Claude, Cursor, or any MCP client that supports OAuth at:
https://www.monial.co/mcp
Copy the URL from Settings.
API and MCP share the same functions, credit rules, and limits — only the transport layer differs. Querying, exporting, and pushing is free. Credits are used for monitoring lists and keywords.
Authentication
MCP uses Clerk OAuth only. Organization API keys are for the REST API — they cannot initialize or authenticate the MCP server.
Add Monial as a custom connector (Claude: Add custom connector). The client discovers:
- Protected resource:
/.well-known/oauth-protected-resource/mcp - Authorization server:
/.well-known/oauth-authorization-server
Sign in with your Monial account and pick the organization. After consent, the client sends Clerk OAuth tokens — not Authorization: Bearer <api_key>.
Tools
get_data
Query signals, accounts, or people. No paging. limit defaults to 25, max 100. This tool does not consume credits.
Signal items nest person and/or account with id, name, imageUrl, and linkedinUrl. Account and people items already include linkedinUrl.
| Input | Type | Description |
|---|---|---|
type | signals | accounts | people | Required |
search | string | Optional search |
limit | number | Default 25, max 100 |
list | string | Existing list id to append rows, or a name to create a new list |
types | string[] | Signal type filters |
industry | string | string[] | Account industry contains; matches any |
location | string | string[] | Account location contains; matches any |
techStack | string | string[] | Account tech stack contains; matches any |
minHeadcount | number | Minimum headcount |
maxHeadcount | number | Maximum headcount |
hasEmail | boolean | People with email |
includeDecisionMakers | boolean | When type is accounts, nest decision-maker people on each account |
fromDate | string | Inclusive start YYYY-MM-DD. Omit for the beginning |
toDate | string | Inclusive end YYYY-MM-DD. Defaults to today |
get_lists
Return saved list ids, names, and monitor settings. No inputs. Does not consume credits.
get_list
Return items in a list, paginated (max 100). No overall cap. Each item includes signals, decision makers, and related entity fields. Does not consume credits.
| Input | Type | Description |
|---|---|---|
id | string | Required list id |
page | number | Default 1 |
limit | number | Default 100, max 100 |
create_list
Create a saved list.
| Input | Type | Description |
|---|---|---|
name | string | Required |
webhookUrl | string | Optional delivery URL |
tab | signals | accounts | people | Default signals |
search | string | Optional search baked into filters |
industry | string | string[] | Optional industry contains filter |
location | string | string[] | Optional location contains filter |
techStack | string | string[] | Optional tech stack contains filter |
selected | { id, type }[] | People/accounts to store |
monitor | boolean | Watch list members for new signals |
monitorInterval | string | Cadence such as 1h or 7d |
upload_list
Create a list from LinkedIn company or profile URLs.
| Input | Type | Description |
|---|---|---|
name | string | Required |
urls | string[] | LinkedIn company or profile URLs |
monitor | boolean | Optional |
monitorInterval | string | Optional cadence such as 1h or 7d |
webhookUrl | string | Optional |
set_list_monitor
Set or remove a list monitor. Each company / account costs 10 credits per run.
| Input | Type | Description |
|---|---|---|
id | string | Required list id |
interval | 1h | 1d | 7d | 14d | 30d | null | null deletes the monitor |
push_to_platform
Push a list's people or accounts to an outbound tool. Does not consume credits.
| Input | Type | Description |
|---|---|---|
listId | string | Required |
platform | clay | heyreach | instantly | smartlead | Required |
webhookUrl | string | Required for Clay |
apiKey | string | Required for Heyreach, Instantly, Smartlead |
get_keywords
Return keyword scrapers for the organization. No inputs. Does not consume credits.
create_keyword
Create a keyword scraper.
| Input | Type | Description |
|---|---|---|
query | string | Required search term |
scrapper | SEARCH_SOCIAL_POSTS | SEARCH_JOBS | SEARCH_NEWS | Required |
interval | 1h | 1d | 7d | 14d | 30d | Default 7d |
webhookUrl | string | Optional delivery URL |
Each new result costs 10 credits.
update_keyword
Update a keyword scraper.
| Input | Type | Description |
|---|---|---|
id | string | Required keyword id |
query | string | Optional |
scrapper | SEARCH_SOCIAL_POSTS | SEARCH_JOBS | SEARCH_NEWS | Optional |
interval | 1h | 1d | 7d | 14d | 30d | Optional |
webhookUrl | string | null | Optional. Pass null to clear |
delete_keyword
Delete a keyword scraper.
| Input | Type | Description |
|---|---|---|
id | string | Required keyword id |
These tools call the same functions as GET /api/v1/data, /api/v1/lists, /api/v1/lists/:id, /api/v1/lists/upload, /api/v1/lists/:id/monitor, /api/v1/lists/:id/push-to-platform, /api/v1/keywords, and /api/v1/keywords/:id.