Heliyos MCP server
OfficialConnect AI agents to Heliyos to browse and act across your CRM, AI workers, scouts, reviews, knowledge, files, and workspace settings.
Find, read, create, update, delete, enrich, and look up companies, people, deals, and custom objects; read timelines, change history, emails, and meetings.
Manage objects and fields, including custom objects (experimental) and adding, changing, or deleting fields.
Create and manage notes and tasks, link them to records, and start workers on tasks.
Work with scouts and signals: create/update/delete scouts, assign scouts to companies, list/mark signals, and manage the watchlist.
Ask Heliyos to do jobs, follow runs, list/get reviews, and approve or reject pending worker actions.
Create, update, delete, and inspect workers; list triggers and available worker tools.
Read/update the knowledge base and entries; list, get, upload, and delete files.
Manage labels, team members/invitations/roles, notification settings, and view credit usage.
Use the record resource template and prompts for account review and daily pipeline summaries.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Heliyos MCP server Find the Acme deal and add a note that we called them today."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@heliyos/heliyos-mcp is a Model Context Protocol server for Heliyos. It runs on your machine over stdio and calls the Heliyos API with a workspace API key, so an agent in Claude Code, Codex, Cursor, VS Code, Antigravity or any other MCP client can work in your CRM.
Documentation: docs.heliyos.ai/mcp · Install guides · All tools · API reference · Changelog
With it, an agent can:
find and update companies, people, deals and custom objects, and add fields to them
read a record's timeline, change history, emails and meetings
write notes and tasks, and start Heliyos workers on a task
list the reviews waiting for a person and approve or reject them
create and configure workers from the trigger and tool catalogs
manage scouts, read their signals and keep the watchlist
read and edit the knowledge base, and upload the files the workers read
hand a job to Heliyos with
heliyos_askand follow the run
Important actions that workers take still wait for review in Heliyos, so the team stays in control.
Quick start
Create an API key in Heliyos under Settings → API keys (details below).
Add the server to your client. For Claude Code:
claude mcp add --transport stdio --env HELIYOS_API_KEY=YOUR_HELIYOS_API_KEY --scope user heliyos -- npx -y @heliyos/heliyos-mcpAsk your agent "Which Heliyos workspace am I connected to?". It calls
heliyos_organization_getand answers with your workspace name.
Every other client is covered in Install.
Related MCP server: ParcelPilot MCP Server
Contents
Before you start
You need Node.js 20 or later (node -v) and a Heliyos API key.
To create a key:
Open Heliyos and go to Settings → API keys (gtm.heliyos.ai/settings/api-keys).
Click New key. Give it a name you will recognise, such as "Claude Code on my laptop", and an expiry date if you want one, then click Create key.
Copy the key. It starts with
heliyos_and is shown once. If you lose it, revoke it and create a new one.
Only workspace owners and admins can create keys. A key has admin access to one workspace, the one you created it in, and to nothing else. Use one key per person and machine, so you can revoke one without breaking the others.
Install
Every client runs the same command, npx -y @heliyos/heliyos-mcp, with your key in the HELIYOS_API_KEY environment variable. In the snippets below, replace YOUR_HELIYOS_API_KEY with your key.
Claude Code
Install the plugin and set your key in one go. The key goes into your system's secure credential store, never into a file, and the plugin adds a skill that teaches Claude when to use which tool.
claude plugin marketplace add heliyos-ai/heliyos-mcp
claude plugin install heliyos@heliyos --config api_key=YOUR_HELIYOS_API_KEYIf you installed without --config, the server stays off until the key is set: run /plugin configure heliyos@heliyos inside Claude Code and enter it there. Then /mcp lists heliyos, or restart Claude Code if it does not.
Or add only the MCP server:
claude mcp add --transport stdio --env HELIYOS_API_KEY=YOUR_HELIYOS_API_KEY --scope user heliyos -- npx -y @heliyos/heliyos-mcpCheck it with claude mcp list, or /mcp inside a session.
Claude Desktop
Open Settings → Developer → Edit Config and add the server to claude_desktop_config.json, then restart Claude Desktop:
{
"mcpServers": {
"heliyos": {
"command": "npx",
"args": ["-y", "@heliyos/heliyos-mcp"],
"env": { "HELIYOS_API_KEY": "YOUR_HELIYOS_API_KEY" }
}
}
}This file stores the key in plain text, so keep it private. Custom connectors on claude.ai and in the Claude connector directory need a hosted (remote) MCP server with OAuth. Heliyos does not offer one yet, so use a local client for now.
Codex
Add the server to ~/.codex/config.toml:
[mcp_servers.heliyos]
command = "npx"
args = ["-y", "@heliyos/heliyos-mcp"]
env_vars = ["HELIYOS_API_KEY"]
startup_timeout_sec = 30
tool_timeout_sec = 120env_vars passes HELIYOS_API_KEY from the shell you start Codex in, so export it there (for example in ~/.zshrc). To keep the key in the file instead, replace the env_vars line with an env table at the end:
[mcp_servers.heliyos.env]
HELIYOS_API_KEY = "YOUR_HELIYOS_API_KEY"The CLI does the same in one line, after which you add tool_timeout_sec = 120 to the table it writes:
codex mcp add heliyos --env HELIYOS_API_KEY=YOUR_HELIYOS_API_KEY -- npx -y @heliyos/heliyos-mcpCursor
The link opens this deeplink, which you can also paste into your browser:
cursor://anysphere.cursor-deeplink/mcp/install?name=heliyos&config=eyJ0eXBlIjoic3RkaW8iLCJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBoZWxpeW9zL2hlbGl5b3MtbWNwIl0sImVudiI6eyJIRUxJWU9TX0FQSV9LRVkiOiIke2VudjpIRUxJWU9TX0FQSV9LRVl9In19It adds this entry to ~/.cursor/mcp.json:
{
"mcpServers": {
"heliyos": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@heliyos/heliyos-mcp"],
"env": { "HELIYOS_API_KEY": "${env:HELIYOS_API_KEY}" }
}
}
}Cursor reads ${env:HELIYOS_API_KEY} from its own environment. Export the variable in your shell profile and start Cursor from that shell, or replace the value with your key. Run npm run install-links in this repository to print the links again.
VS Code
The link opens this deeplink, which you can also paste into your browser:
vscode:mcp/install?%7B%22name%22%3A%22heliyos%22%2C%22inputs%22%3A%5B%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22heliyos-api-key%22%2C%22description%22%3A%22Heliyos%20API%20key%20(Settings%20%E2%86%92%20API%20keys)%22%2C%22password%22%3Atrue%7D%5D%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40heliyos%2Fheliyos-mcp%22%5D%2C%22env%22%3A%7B%22HELIYOS_API_KEY%22%3A%22%24%7Binput%3Aheliyos-api-key%7D%22%7D%7D)%22%2C%22password%22%3Atrue%7D%5D%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40heliyos%2Fmcp%22%5D%2C%22env%22%3A%7B%22HELIYOS_API_KEY%22%3A%22%24%7Binput%3Aheliyos-api-key%7D%22%7D%7DVS Code asks for the key the first time the server starts and keeps it in its secret storage. To set it up by hand, add this to .vscode/mcp.json in a project, or to your user mcp.json (MCP: Open User Configuration):
{
"inputs": [
{
"type": "promptString",
"id": "heliyos-api-key",
"description": "Heliyos API key (Settings → API keys)",
"password": true
}
],
"servers": {
"heliyos": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@heliyos/heliyos-mcp"],
"env": { "HELIYOS_API_KEY": "${input:heliyos-api-key}" }
}
}
}Antigravity
In the agent panel, open … → MCP Servers → Manage MCP Servers → View raw config, or edit ~/.gemini/config/mcp_config.json directly (.agents/mcp_config.json for one project):
{
"mcpServers": {
"heliyos": {
"command": "npx",
"args": ["-y", "@heliyos/heliyos-mcp"],
"env": { "HELIYOS_API_KEY": "YOUR_HELIYOS_API_KEY" }
}
}
}Any other client
Run the package over stdio with the key in the environment:
HELIYOS_API_KEY=YOUR_HELIYOS_API_KEY npx -y @heliyos/heliyos-mcpThe repository also ships portable Agent Plugins manifests (plugin.json and mcp.json) for clients that install plugins from a Git repository. They do not carry a key, so set HELIYOS_API_KEY in the environment your client starts servers with. In the MCP Registry the server is listed as ai.heliyos/heliyos-mcp.
Tool timeout
heliyos_ask waits up to 90 seconds for Heliyos to answer, so give tool calls at least 120 seconds.
Client | Setting |
Codex |
|
Claude Code | The default is long enough. If you set |
Claude Desktop | No documented setting. |
Cursor | No documented tool timeout setting. |
VS Code | No documented tool timeout setting. |
Antigravity | No documented tool timeout setting. |
When a client cuts a call short, the run keeps going in Heliyos. Find it with heliyos_runs_list and follow it with heliyos_runs_get and wait: true, which waits up to 30 seconds per call.
A rate-limited request (HTTP 429) is retried once after the Retry-After delay, capped at 30 s, so a heliyos_ask that hits the limit can take about 125 seconds. If you see timeouts while you are near the limit, raise the timeout to 150 seconds.
Configuration
Variable | Required | Default | What it does |
| Yes | None | Your Heliyos API key. It must start with |
| No |
| The Heliyos API to call. It must use https; plain http is accepted only for localhost. |
| No | Off |
|
The server also offers a resource template, heliyos://records/{id}, which returns one record as JSON, and two prompts: prepare_account_review (for one company) and daily_pipeline_summary.
Tools
Every tool is named heliyos_<resource>_<verb> and declares whether it reads, writes or deletes, so your client can ask before it changes anything. Reads take response_format (concise or detailed), and lists take limit and cursor.
73 tools by default, and 4 more with HELIYOS_MCP_EXPERIMENTAL=1. Kind is read (no changes), write (creates or updates) or destructive (deletes or removes).
Records
Tool | What it does | Kind |
| List records | read |
| Get a record | read |
| Create a record | write |
| Update a record | write |
| Delete records | destructive |
| Find records by name | read |
| Enrich a person (experimental) | write |
Timeline and activity
Tool | What it does | Kind |
| Read a record's timeline | read |
| Read a record's change history | read |
| List emails and meetings | read |
| Get an email or meeting | read |
Workspace, objects and fields
Tool | What it does | Kind |
| Get the workspace | read |
| List objects | read |
| Get an object's fields | read |
| Create a custom object (experimental) | write |
| Rename or describe an object (experimental) | write |
| Delete a custom object (experimental) | destructive |
| Add a field to an object | write |
| Change a field | destructive |
| Delete a field | destructive |
Notes
Tool | What it does | Kind |
| List notes | read |
| Get a note | read |
| Create a note | write |
| Update a note | write |
| Delete a note | destructive |
Tasks
Tool | What it does | Kind |
| List tasks | read |
| Get a task | read |
| Read a task's activity | read |
| Create a task | write |
| Update a task | write |
| Delete a task | destructive |
| Run workers on a task | destructive |
Scouts and signals
Tool | What it does | Kind |
| List scouts | read |
| Get a scout | read |
| Create a scout | write |
| Update a scout | write |
| Delete a scout | destructive |
| List a company's scouts | read |
| Add scouts to a company | write |
| Remove a company's scouts | destructive |
| List signals | read |
| Mark signals read | write |
Ask, runs and reviews
Tool | What it does | Kind |
| Ask Heliyos | destructive |
| Get a run | read |
| List runs | read |
| List reviews | read |
| Get a review | read |
| Approve or reject a review | destructive |
Workers, triggers and tools
Tool | What it does | Kind |
| List workers | read |
| Get a worker | read |
| Create a worker | write |
| Update a worker | write |
| Delete a worker | destructive |
| List worker triggers | read |
| List tools a worker can use | read |
Knowledge base and files
Tool | What it does | Kind |
| Read the knowledge base | read |
| Update the knowledge base | write |
| Add or change a knowledge entry | write |
| Delete a knowledge entry | destructive |
| List files | read |
| Get a file | read |
| Upload a file | write |
| Delete a file | destructive |
Watchlist
Tool | What it does | Kind |
| Get the watchlist | read |
| Watch a company | write |
| Unwatch a company | destructive |
Labels
Tool | What it does | Kind |
| List label groups | read |
| Create a label group | write |
| Update a label group | destructive |
| Delete a label group | destructive |
Team
Tool | What it does | Kind |
| List team members | read |
| Invite a team member | write |
| Remove a team member | destructive |
| Change a team member's role | write |
Notification settings
Tool | What it does | Kind |
| Get notification settings | read |
| Update notification settings | write |
Usage
Tool | What it does | Kind |
| Get credit usage | read |
Security
Your key stays on your machine. The server reads it from its environment and sends it only to the Heliyos API (
HELIYOS_BASE_URL), as a bearer token over https. It refuses a base URL that is not https, other than localhost.File uploads skip the key. File content goes to a short-lived signed storage URL, and that request does not carry your key.
No telemetry. The server sends nothing anywhere else and keeps no logs. Diagnostics go to your client's stderr, and error messages have keys removed.
Rate limits. The API allows 60 requests per minute per key, and per IP address. When it answers 429, the server waits for
Retry-Afterand retries once.Least access. A key has admin rights in one workspace. Give it an expiry, keep one key per person and machine, and revoke it in Settings → API keys when you no longer need it.
Destructive tools are marked. Deletes and removals are annotated as destructive, and the agent skill tells agents to confirm them first.
Report a security issue privately through GitHub security advisories rather than in a public issue.
Troubleshooting
What you see | What to do |
| The client did not pass the key. Check the |
| The value is not a Heliyos key. Keys start with |
| The key was revoked, has expired or was mistyped. Create a new key in Settings → API keys. |
| The workspace plan or billing status does not allow the action, or the action is not available to API keys. |
| You are above 60 requests per minute. Wait a minute, and prefer list calls over many single gets. |
| Raise the client's tool timeout (see Tool timeout). The run keeps going; follow it with |
The server shows "connecting" on its first start | The first |
| The client started |
Experimental tools are missing | Set |
Still stuck? Open an issue at github.com/heliyos-ai/heliyos-mcp/issues. Never paste your key.
Development
Requirements: Node.js 20 or later and npm. Everything else is a dev dependency.
git clone https://github.com/heliyos-ai/heliyos-mcp.git
cd heliyos-mcp
npm ci
npm test # unit tests with a mocked Heliyos API
npm run typecheck
npm run build # codegen, then tsc into dist/
npm run readme:tools # regenerate the tool table above
npm run install-links # print the Cursor and VS Code install links
npm run prepublish:check # manifests, versions and package contents
HELIYOS_API_KEY=YOUR_HELIYOS_API_KEY npm run smoke # read-only checks against a real workspaceTo run your local build in a client instead of the published package, point the client at dist/src/bin/stdio.js:
claude mcp add --transport stdio --env HELIYOS_API_KEY=YOUR_HELIYOS_API_KEY --scope user heliyos-dev -- node /path/to/heliyos-mcp/dist/src/bin/stdio.jsHow it is built
src/client/openapi/holds copies of the Heliyos API's OpenAPI documents.npm run codegenturns them into a typed operation table (src/client/generated.ts) with zod schemas, so every request is validated before it is sent.src/tools/defines one file per resource. Each tool declares its input and output schemas, its annotations (read, write or destructive) and a handler that calls one or two API operations and renders a short text plusstructuredContent.tests/runs every tool against a mocked API with msw. A snapshot test pins the public tool contract (names, annotations, input keys), so an accidental change fails the build.skills/heliyos/SKILL.mdships with the Claude Code plugin and teaches the agent when to use which tool.
Updating the API client
When the Heliyos API changes, save the new OpenAPI documents and resync:
curl -s https://api-prod.heliyos.ai/v1/platform/openapi.json -o /tmp/platform.json
curl -s https://api-prod.heliyos.ai/v1/auth/openapi.json -o /tmp/auth.json
HELIYOS_PLATFORM_OPENAPI=/tmp/platform.json HELIYOS_AUTH_OPENAPI=/tmp/auth.json npm run sync-openapi
npm run codegen && npm testWith those two variables set, npm run prepublish:check and the drift test also refuse a bundled copy that no longer matches.
Releasing
Releases are published by GitHub Actions on every push to main (.github/workflows/publish-package.yml):
CI builds, tests and checks the package and manifests.
If the version in
package.jsonis already on npm, the workflow bumps the patch version withnode scripts/set-version.mjs, which keepspackage.json, the lockfile,server.json, every plugin manifest andsrc/version.tson the same version, and commits the bump.It publishes to npm with provenance through npm trusted publishing (no token is stored anywhere), waits until the version is served, and then publishes
server.jsonto the MCP registry when theMCP_PRIVATE_KEYsecret is configured.
To cut a specific version, run node scripts/set-version.mjs 1.2.0, commit, and push to main. See CONTRIBUTING.md for the one-time repository setup.
Contributing
Issues and pull requests are welcome. Read CONTRIBUTING.md for the workflow, the coding rules and how to add a tool, and SECURITY.md for how to report a vulnerability. By participating you agree to the code of conduct.
License
Available Tools
73 toolsheliyos_askAsk HeliyosADestructive
Asks Heliyos (the orchestrator and its workers) a question or gives it a job, in plain language, for example "summarise what changed with Acme this week" or "draft a follow-up to the Globex thread". It can read and act on the whole workspace: it may change records and tasks or send email, and consequential actions wait for approval in Heliyos, so confirm jobs that change things with the user first. Waits up to 90 s: a finished run returns its answer and run_id. Otherwise it returns {run_id, status, thread_id} and the text "Still running"; then call heliyos_runs_get with that run_id and wait: true. Pass thread_id to continue the same conversation. Runs use credits; calling it twice starts two runs. Needs a client tool timeout of at least 120 s. Returns structuredContent {run_id, status, thread_id, done, answer?}.
Inputs: message (required), thread_id. Returns: done, answer, run_id, status, +1 more
heliyos_companies_scouts_addAdd scouts to a companyA
Starts the given scouts on one company. Each scout_id must be an active global scout with apply_to watchlist (see heliyos_scouts_list). Setup runs in the background; check it with heliyos_companies_scouts_list. A scout already running on the company is not added twice. Scout runs use credits. Returns structuredContent {company_id, scout_ids, status}.
Inputs: scout_ids (required), company_id (required). Returns: status, scout_ids, company_id
heliyos_companies_scouts_listList a company's scoutsARead-onlyIdempotent
Lists the scouts running on one company: each company scout's own id, its global scout id (scout_id, for heliyos_scouts_get), status (active, paused or failed), cadence and last run. A company has only a few, so there is no paging. Returns structuredContent {company_id, scouts:[{id, scout_id, name, status, ...}]}.
Inputs: company_id (required), status. Returns: scouts, company_id
heliyos_companies_scouts_removeRemove a company's scoutsADestructiveIdempotent
Stops and removes EVERY scout running on one company (there is no per-scout removal). Signals already found are kept, and the company stays watched. This cannot be undone: confirm with the user first. Returns structuredContent {company_id, removed (company scout ids), failed}.
Inputs: company_id (required). Returns: failed, removed, company_id
heliyos_companies_unwatchUnwatch a companyADestructiveIdempotent
Removes a company record from the watchlist. Its Scouts are deleted and the workers stop monitoring it; its history (emails, meetings, notes, signals) is kept, so watching it again resumes where it left off. Confirm with the user first. Returns structuredContent {record_id, watched}.
Inputs: record_id (required). Returns: watched, record_id
heliyos_companies_watchWatch a companyAIdempotent
Adds a company record to the watchlist: the workers enrich it, pull in its emails and meetings, and start its Scouts. Counts against the plan's watched-company limit (heliyos_organization_get) and uses credits for enrichment. Watching an already watched company changes nothing. Returns structuredContent {record_id, watched}.
Inputs: record_id (required). Returns: watched, record_id
heliyos_fields_createAdd a field to an objectA
Adds one field (column) to an object: companies, people, deals or a custom object (object_type, plus schema_id for custom). Give it a label and a type; select and multiSelect need options; ai_prompt makes it an AI column. The field key (what record fields and filters use) is derived from the label unless key is given, and must be new on the object. Relationship fields are created in the Heliyos web app. Calling this twice with the same key fails. Returns structuredContent {field:{field_id, key, label, type}}.
Inputs: type (required), label (required), object_type (required), key, +7 more. Returns: field
heliyos_fields_deleteDelete a fieldADestructiveIdempotent
Permanently deletes one field of an object by field_id (from heliyos_objects_get) AND its value on every record. This cannot be undone: confirm with the user first, naming the field and the object. Built-in required fields (for example a company's name) are refused by the platform. Returns structuredContent {field_id, key, deleted}.
Inputs: field_id (required), object_type (required), schema_id. Returns: key, deleted, field_id
heliyos_fields_updateChange a fieldADestructiveIdempotent
Changes one field of an object by field_id (from heliyos_objects_get): its label, description, options, required or hidden flag, AI prompt, or type. What you leave out is kept. options REPLACES the allowed values, and records holding a removed value keep it as stale text. A type change is refused by the platform when existing values do not fit the new type. The field key never changes. Returns structuredContent {field}.
Inputs: field_id (required), object_type (required), type, label, +6 more. Returns: field
heliyos_files_deleteDelete a fileADestructiveIdempotent
Permanently deletes one file by id. A knowledge-base file also disappears from what the workers can read. This cannot be undone: confirm with the user first. Returns structuredContent {file_id, deleted}.
Inputs: file_id (required). Returns: deleted, file_id
heliyos_files_getGet a fileARead-onlyIdempotent
Fetches one file's details by id: name, kind, type, size, description and the records it is attached to. "detailed" also returns a signed download link that expires about 60 s after the call, so use it at once. Returns structuredContent {file}.
Inputs: file_id (required), response_format. Returns: file
heliyos_files_listList filesARead-onlyIdempotent
Lists files, newest first: knowledge-base files (documents the workers read, kind knowledge_base) and attachments on records (kind attachment). Filter by kind, by the record a file is attached to (record_id) or by name. Shows each file's id, name, kind, type and size; use heliyos_files_get for a download link. Returns structuredContent {files:[{id, name, kind, content_type, size_bytes}], next_cursor}.
Inputs: kind, limit, cursor, search, +2 more. Returns: files, next_cursor
heliyos_files_uploadUpload a fileA
Uploads one file, up to 10 MB, as a knowledge-base file (kind knowledge_base: documents the workers read, such as playbooks or pricing) or as an attachment (kind attachment), optionally attached to one record (record_id). Pass the content as text (stored as UTF-8) or as content_base64 for binary files, exactly one of the two. content_type is guessed from the name's extension when omitted; HTML, SVG, XML, scripts and executables are refused. Calling it twice stores two files. Returns structuredContent {file}.
Inputs: kind (required), name (required), text, record_id, +2 more. Returns: file
heliyos_interactions_getGet an email or meetingARead-onlyIdempotent
Fetches one synced email thread or meeting by id (from heliyos_interactions_list or heliyos_records_timeline): subject or title, time, the AI summary, sentiment, the records it is linked to, participants and next steps. "concise" cuts the summary; "detailed" returns all of it. Returns structuredContent {interaction}.
Inputs: interaction_id (required), response_format. Returns: interaction
heliyos_interactions_listList emails and meetingsARead-onlyIdempotent
Lists synced emails and meetings, newest first, optionally only those linked to one record (record_id) or of one channel. Each has its subject or title, time, AI summary and the records it is linked to. "detailed" adds participants and next steps; heliyos_interactions_get returns one with its full summary. Order with sort. Returns structuredContent {interactions:[{id, channel, title, at, summary, record_ids}], next_cursor}.
Inputs: sort, limit, cursor, search, +3 more. Returns: next_cursor, interactions
heliyos_knowledge_entries_deleteDelete a knowledge entryADestructiveIdempotent
Removes one custom knowledge entry by label. The fixed texts and other entries are kept. This cannot be undone: confirm with the user first. Returns structuredContent {label, deleted, entries}.
Inputs: label (required). Returns: label, deleted, entries
heliyos_knowledge_entries_setAdd or change a knowledge entryAIdempotent
Adds a custom knowledge entry (a label and its content) or replaces the content of the entry with that label. Other entries and the fixed texts are kept. Use it for facts the fixed texts do not cover, for example "Pricing" or "Competitors". Remove one with heliyos_knowledge_entries_delete. Returns structuredContent {entry, created, entries}.
Inputs: label (required), content (required). Returns: entry, created, entries
heliyos_knowledge_getRead the knowledge baseARead-onlyIdempotent
Returns what the workers know about the business: the business context, products information, pain points, value proposition and qualification criteria, and the team's custom entries (label and content). Texts are cut at 1500 characters in concise. Knowledge-base files are listed with heliyos_files_list kind knowledge_base. Returns structuredContent {knowledge:{business_context, products_information, ..., entries}}.
Inputs: response_format. Returns: knowledge
heliyos_knowledge_updateUpdate the knowledge baseAIdempotent
Changes the knowledge base's fixed texts: business_context, products_information, pain_points, value_proposition and qualification_criteria. What you leave out is kept, and the custom entries are untouched (use heliyos_knowledge_entries_set for those). Each text replaces the current one whole, so read it with heliyos_knowledge_get first when you mean to add to it. The workers read these on their next run. Returns structuredContent {knowledge}.
Inputs: pain_points, business_context, value_proposition, products_information, +1 more. Returns: knowledge
heliyos_labels_createCreate a label groupA
Creates a classification label group with its values, for example name Intent, values [Pricing, Support]. The workers start applying it to new emails and meetings when it is active. Calling it twice creates two groups; check heliyos_labels_list first. Returns structuredContent {label}.
Inputs: name (required), description (required), values, is_active. Returns: label
heliyos_labels_deleteDelete a label groupADestructiveIdempotent
Permanently deletes a label group and its values by id. This cannot be undone: confirm with the user first. To stop the workers applying it but keep it, use heliyos_labels_update with is_active false. Returns structuredContent {label_id, deleted}.
Inputs: label_id (required). Returns: deleted, label_id
heliyos_labels_listList label groupsARead-onlyIdempotent
Lists the workspace's classification label groups (for example Intent with values Pricing and Support) that the workers apply to emails and meetings, with each group's id, active flag and values (each with its id). Returns structuredContent {labels:[{id, name, is_active, values:[{id, name}]}], next_cursor}.
Inputs: limit, cursor, search, is_active, +1 more. Returns: labels, next_cursor
heliyos_labels_updateUpdate a label groupADestructiveIdempotent
Changes a label group's name, description, active flag or values by label_id. values REPLACES the group's values: to keep a value, pass it with its existing id (shown as "Name (id …)" by heliyos_labels_list); a value without an id is created as a NEW value, even if its name matches an existing one. Values left out are removed, and emails and meetings already classified with them lose that label. Returns structuredContent {label}.
Inputs: label_id (required), name, values, is_active, +1 more. Returns: label
heliyos_notes_createCreate a noteA
Creates a note, optionally linked to records (a company, person or deal) so it shows on them and can trigger workers. Calling it twice creates two notes. Returns the new note's id as structuredContent {note}.
Inputs: title (required), content, record_ids. Returns: note
heliyos_notes_deleteDelete a noteADestructiveIdempotent
Permanently deletes one note by id. This cannot be undone: confirm with the user first. Returns structuredContent {note_id, deleted}.
Inputs: note_id (required). Returns: deleted, note_id
heliyos_notes_getGet a noteARead-onlyIdempotent
Fetches one note by id with its title, text and linked records. "concise" cuts the text at 1500 characters; "detailed" returns all of it plus created and updated times. Returns structuredContent {note}.
Inputs: note_id (required), response_format. Returns: note
heliyos_notes_listList notesARead-onlyIdempotent
Lists notes, newest first, optionally only those linked to one record (record_id) or matching text in the title or body. Each note shows its id, title, a short preview and the records it is linked to. Use heliyos_notes_get for the full text. Returns structuredContent {notes:[{id, title, content, links}], next_cursor}.
Inputs: limit, cursor, search, record_id, +1 more. Returns: notes, next_cursor
heliyos_notes_updateUpdate a noteAIdempotent
Changes a note's title, text or linked records by id; what you leave out is kept. record_ids REPLACES the note's links (pass every record it should stay linked to). Returns structuredContent {note}.
Inputs: note_id (required), title, content, record_ids. Returns: note
heliyos_notification_settings_getGet notification settingsARead-onlyIdempotent
Returns the workspace's notification email settings: whether they are on, who receives them, and which events notify (each immediate or in a daily digest). Returns structuredContent {settings:{configured, is_active, notify_emails, event_types:[{type, frequency}]}}.
Inputs: no named parameters. Returns: settings
heliyos_notification_settings_updateUpdate notification settingsAIdempotent
Changes the workspace's notification email settings. Each key you pass REPLACES that setting: notify_emails is the full recipient list and event_types the full list of notifying events (read the current ones with heliyos_notification_settings_get and send the complete list). Keys you leave out are kept. scout.signal_detected is always immediate. Returns structuredContent {settings}.
Inputs: is_active, event_types, notify_emails. Returns: settings
heliyos_objects_getGet an object's fieldsARead-onlyIdempotent
Returns one object's fields: each field key (what heliyos_records_create, _update and _list filters take), its label and type, and which are required. "detailed" adds the allowed values of select fields, hidden and AI-filled flags, and the target object of relationship fields. Pick the object with object_type (company, person, deal, or custom with schema_id from heliyos_objects_list). Each field's field_id feeds heliyos_fields_update and heliyos_fields_delete; heliyos_fields_create adds one. Returns structuredContent {object:{schema_id, name, fields:[{key, field_id, type, ...}]}}.
Inputs: object_type (required), schema_id, response_format. Returns: object
heliyos_objects_listList objectsARead-onlyIdempotent
Lists the workspace's objects (record types): companies, people, deals and any custom objects, with each one's schema_id, object_type, record count and number of fields. Use it to learn which object_type and schema_id to pass to the heliyos_records_* tools (custom objects need schema_id), then heliyos_objects_get for an object's field keys. Returns every object in one page (a workspace has a handful), as structuredContent {objects}.
Inputs: response_format. Returns: objects
heliyos_organization_getGet the workspaceARead-onlyIdempotent
Returns the Heliyos workspace this API key belongs to: its id and name, billing status, active plan, member count, how many companies, people and deals it holds, and how many companies are watched out of the plan's limit. Call it first to orient yourself. Use heliyos_objects_list for the objects and their schema ids, heliyos_usage_get for credit usage. Returns structuredContent {organization}.
Inputs: no named parameters. Returns: organization
heliyos_records_createCreate a recordA
Creates one record (a company, person, deal, or custom object row) with the given field values. Check first with heliyos_records_lookup that the record does not already exist; calling this twice creates two records. Creating a company can start automatic enrichment, which uses credits when automatic enrichment is on (Settings, Autopilot). Returns the new record's id and key fields as structuredContent {record}.
Inputs: fields (required), object_type (required), schema_id. Returns: record
heliyos_records_deleteDelete recordsADestructiveIdempotent
Permanently deletes up to 100 records of one object by id. This cannot be undone: confirm with the user first. All ids must belong to the given object_type; the API ignores ids from other objects and does not confirm a count. Returns structuredContent {deleted_count (ids sent), record_ids}.
Inputs: record_ids (required), object_type (required), schema_id. Returns: record_ids, deleted_count
heliyos_records_eventsRead a record's change historyARead-onlyIdempotent
Returns the audit trail of one record: who changed what and when (people and workers), newest first, each with a one-line change summary. Filter by operation type, event type, date range or text. "detailed" adds the paths of the changed fields. Use heliyos_records_timeline instead for a narrative of the relationship. Returns structuredContent {events:[{id, at, operation_type, actor, change_summary}], next_cursor}.
Inputs: record_id (required), limit, since, until, +5 more. Returns: events, next_cursor
heliyos_records_getGet a recordARead-onlyIdempotent
Fetches one record (a company, person, deal, or custom object row) by id. Use it after heliyos_records_list or heliyos_records_lookup gives you an id. "concise" returns the name, key fields and a count of linked records; "detailed" returns every field, the linked records (for example a person's company or a company's deals) with their ids, and created and updated times. Returns structuredContent {record:{id, object_type, schema_id, name, fields, relationships}}.
Inputs: record_id (required), response_format. Returns: record
heliyos_records_listList recordsARead-onlyIdempotent
Lists records of one object (companies, people, deals, or a custom object) in the Heliyos workspace, newest first. Use it to browse or filter records; use heliyos_records_lookup to find a record by name and heliyos_records_get for one record. Filter with search (free text) and filters (field conditions joined by match); order with sort. Returns a table of id, name and key fields plus structuredContent {records:[{id, object_type, name, fields}], next_cursor}. When next_cursor is present, call again with cursor set to it for the next page. Record ids feed heliyos_records_get, _update and _delete.
Inputs: object_type (required), sort, limit, match, +5 more. Returns: records, next_cursor
heliyos_records_lookupFind records by nameARead-onlyIdempotent
Finds records of one object whose name contains query (case-insensitive; exact and prefix matches rank first), or whose secondary value does (the first of domain, email, job title or stage that the object has). Use it to turn a name the user mentions into a record id. It searches the 2000 most recently updated records; for older ones use heliyos_records_list with search. Returns structuredContent {matches:[{id, name, secondary}], total_matches}.
Inputs: query (required), object_type (required), limit, schema_id, +1 more. Returns: matches, total_matches, index_truncated
heliyos_records_timelineRead a record's timelineARead-onlyIdempotent
Returns the AI-written timeline of one record (company, person or deal): the record's current relationship summary and dated entries describing what happened (emails, meetings, deal moves), newest first. Use it to brief yourself on an account before acting. For the raw audit trail of field changes use heliyos_records_events; for the emails and meetings themselves use heliyos_interactions_list. Returns structuredContent {record_id, summary, entries, next_cursor}.
Inputs: record_id (required), limit, cursor, response_format. Returns: total, entries, summary, record_id, +1 more
heliyos_records_updateUpdate a recordAIdempotent
Updates some fields of one record by id; fields you leave out keep their values. Set a field to null to clear it. Field keys are checked against the record's object first, and unknown keys are rejected with the valid ones. relationships adds links and never removes existing ones. Get the id from heliyos_records_list or heliyos_records_lookup. Returns the changed fields and the record's key fields as structuredContent {record}.
Inputs: fields (required), record_id (required). Returns: record
heliyos_reviews_decideApprove or reject a reviewADestructive
Decides one pending review. Approving does the thing the worker proposed: the email is sent, the deal or label is changed, the meeting is booked, or the paused run continues with its action; rejecting discards it and tells the worker why (feedback). A review is decided once; a second call fails. Approving acts on the user's behalf and cannot be undone: read it with heliyos_reviews_get and confirm with the user first. For a deal_update you may pass the fields as the user edited them in data; for a paused tool call, edited arguments in args. Returns structuredContent {review_id, decision, status, run_notified}.
Inputs: decision (required), review_id (required), args, data, +2 more. Returns: review, status, decision, review_id, +1 more
heliyos_reviews_getGet a reviewARead-onlyIdempotent
Fetches one review by id with everything a person needs to decide it: the worker's proposal and reasoning, the draft email (subject, recipients, body) or the deal's fields before and after, the records and run it belongs to, and, once decided, the comment and outcome. Long texts are cut at 400 characters in concise. Returns structuredContent {review}.
Inputs: review_id (required), response_format. Returns: review
heliyos_reviews_listList reviewsARead-onlyIdempotent
Lists reviews: worker actions waiting for a person's decision (an email draft, a deal change, a meeting, a task, a document, or a question the worker asked), pending ones by default, newest first. Filter by status, type, or the record or task they are about. Each shows its id, type, title, summary, the worker and the records. Read one with heliyos_reviews_get, decide it with heliyos_reviews_decide. Returns structuredContent {reviews:[{id, status, type, title, summary, worker, run_id, records}], next_cursor}.
Inputs: type, limit, cursor, status, +2 more. Returns: reviews, next_cursor
heliyos_runs_getGet a runARead-onlyIdempotent
Reads one worker run: its status, whether it is done, its steps (seq, type, title, status, start and end times, a one-line summary each), reviews waiting on a person, credits used, and the final answer once there is one. wait: true waits up to 30 s for the run to finish or stop on a person; call again with wait: true while done is false, unless the run waits on a person (awaiting_approval, paused, waiting, scheduled): then it only moves when someone acts in Heliyos, and wait: true returns at once. "detailed" adds each step's raw input, output and error. Returns structuredContent {run:{id, status, done, steps, reviews, answer?}}.
Inputs: run_id (required), wait, response_format. Returns: run
heliyos_runs_listList runsARead-onlyIdempotent
Lists worker runs (chats with Heliyos, task runs and automatic runs), newest first, optionally in one status, for one task, one worker or one company, or in a date range. Shows each run's id, status, title and start time; read one with heliyos_runs_get. Order with sort. Returns structuredContent {runs:[{id, status, title, ...}], next_cursor}.
Inputs: sort, limit, since, until, +6 more. Returns: runs, next_cursor
heliyos_scouts_createCreate a scoutA
Creates a custom scout and starts a preview run of its query. The scout stays inactive until you confirm it: when heliyos_scouts_get shows preview completed, call heliyos_scouts_update with state "confirmed" to activate it on its companies. apply_to: watchlist (every watched company, the default), selected_watchlist (only selected_company_ids, which must be watched companies) or entire_web. The scope cannot be changed later. Scout runs use credits. Calling this twice creates two scouts. Returns structuredContent {scout}.
Inputs: name (required), query (required), category (required), effort, +5 more. Returns: scout
heliyos_scouts_deleteDelete a scoutADestructiveIdempotent
Permanently deletes one custom scout and stops it on every company it runs on. Built-in (default) scouts cannot be deleted; pause them with heliyos_scouts_update state "paused". Signals it already found are kept. This cannot be undone: confirm with the user first. Returns structuredContent {scout_id, deleted, deleted_company_scouts}.
Inputs: scout_id (required). Returns: deleted, scout_id, deleted_company_scouts
heliyos_scouts_getGet a scoutARead-onlyIdempotent
Fetches one scout by id: what it looks for (its query), cadence, effort, scope, whether it is active, its preview state (custom scouts) and its signal counts. "detailed" adds the 5 most recent signals with their ids and the full query. Returns structuredContent {scout, recent_signals?}.
Inputs: scout_id (required), response_format. Returns: scout, recent_signals
heliyos_scouts_listList scoutsARead-onlyIdempotent
Lists the workspace's scouts: the built-in (default) and custom monitors that look for events such as funding, hiring or leadership changes on watched companies or across the web. Shows each scout's id, whether it is active, its cadence, and how many signals it found (new of total). Returns every scout (there are only a few, so there is no paging). Use heliyos_scouts_get for one scout's query and recent signals, heliyos_signals_list for what scouts found. Returns structuredContent {scouts:[{id, name, type, is_active, ...}]}.
Inputs: type, apply_to, is_active, response_format. Returns: scouts
heliyos_scouts_updateUpdate a scoutAIdempotent
Changes a scout's name, category, query, cadence, effort or selected companies, and/or its state; what you leave out is kept. Changes apply to every company the scout runs on. state: "paused" stops it on every company, "active" resumes it, "confirmed" activates a new custom scout after its preview completed. The scope (apply_to) cannot be changed. To delete a custom scout use heliyos_scouts_delete. Returns structuredContent {scout}.
Inputs: scout_id (required), name, query, state, +4 more. Returns: scout
heliyos_signals_listList signalsARead-onlyIdempotent
Lists signals (events scouts found, such as a funding round or a leadership change), newest first. Filter by company_id, by scout_id (a global scout from heliyos_scouts_list) and by status (new = unread). Each signal shows its id, date, company and a summary; detailed adds source URLs. Mark them read with heliyos_signals_mark_read. Returns structuredContent {signals:[{id, status, detected_at, company_id, company_name, summary}], next_cursor}.
Inputs: limit, cursor, status, scout_id, +2 more. Returns: signals, next_cursor
heliyos_signals_mark_readMark signals readAIdempotent
Marks signals read: either the given signal_ids (1 to 20) or every new signal about one company (company_id). Pass exactly one of the two. Marking a read signal again changes nothing. Returns structuredContent {marked, failed} for signal_ids, or {company_id, marked_count} for a company.
Inputs: company_id, signal_ids. Returns: failed, marked, company_id, marked_count
heliyos_tasks_createCreate a taskA
Creates a task, optionally linked to records (a company, person or deal). Creating a task can start workers that subscribe to new tasks. Calling it twice creates two tasks. To have workers act on it now, call heliyos_tasks_run with the returned id. Returns structuredContent {task}.
Inputs: title (required), status, due_date, priority, +2 more. Returns: task
heliyos_tasks_deleteDelete a taskADestructiveIdempotent
Permanently deletes one task by id. This cannot be undone: confirm with the user first. Returns structuredContent {task_id, deleted}.
Inputs: task_id (required). Returns: deleted, task_id
heliyos_tasks_eventsRead a task's activityARead-onlyIdempotent
Returns the activity (change history) of one task: who changed what and when (people and workers), newest first, each with a one-line change summary. "detailed" adds the paths of the changed fields. For a company, person or deal use heliyos_records_events; for what the workers did on the task use heliyos_runs_list with task_id. Returns structuredContent {events:[{id, at, operation_type, actor, change_summary}], next_cursor}.
Inputs: task_id (required), limit, cursor, response_format. Returns: events, next_cursor
heliyos_tasks_getGet a taskARead-onlyIdempotent
Fetches one task by id: title, status, priority, due date, assignees and workers, the workers' run status and run_id, the records it is linked to, and its description (cut at 1500 characters in concise). Returns structuredContent {task}.
Inputs: task_id (required), response_format. Returns: task
heliyos_tasks_listList tasksARead-onlyIdempotent
Lists tasks, newest first, optionally only those linked to one record (record_id), in one status, or matching text. Each task shows its id, title, status, priority, due date and whether workers are running on it. Use heliyos_tasks_get for the description and links. Returns structuredContent {tasks:[{id, title, status, ...}], next_cursor}.
Inputs: limit, cursor, search, status, +2 more. Returns: tasks, next_cursor
heliyos_tasks_runRun workers on a taskADestructive
Starts the workers (AI agents) on one task now and marks it in progress. If a run is already open, returns that run instead of starting another. Runs use credits; the call fails when the workspace is out of them. Returns structuredContent {task_id, run_id, started, status}; follow the run with heliyos_runs_get using run_id.
Inputs: task_id (required). Returns: run_id, status, started, task_id
heliyos_tasks_updateUpdate a taskAIdempotent
Changes a task's title, description, status, priority, due date or linked records by id; what you leave out is kept. Setting status completed also marks it finished. record_ids REPLACES the task's links (pass every record it should stay linked to). Returns structuredContent {task}.
Inputs: task_id (required), title, status, due_date, +3 more. Returns: task
heliyos_team_members_change_roleChange a team member's roleAIdempotent
Sets a team member's role to ADMIN or MEMBER by membership_id (from heliyos_team_members_list). Owners' roles and the OWNER role cannot be changed with an API key. Returns structuredContent {membership_id, role}.
Inputs: role (required), membership_id (required). Returns: role, membership_id
heliyos_team_members_inviteInvite a team memberA
Emails an invitation to join the workspace with the given role (ADMIN or MEMBER). A second invite to an email with a pending invitation fails with CONFLICT (resend it from Heliyos), so check heliyos_team_members_list first. Returns structuredContent {member} with the new membership_id and status invited.
Inputs: role (required), email (required). Returns: member
heliyos_team_members_listList team membersARead-onlyIdempotent
Lists the workspace's people: joined members and pending invitations, each with its membership_id, email, name, role (OWNER, ADMIN, MEMBER) and status (active, invited, declined or revoked). Filter by role or by text in the name or email. Returns structuredContent {members:[{membership_id, email, name, role, status}], total, next_cursor}.
Inputs: role, limit, cursor, search, +1 more. Returns: total, members, next_cursor
heliyos_team_members_removeRemove a team memberADestructiveIdempotent
Removes a person from the workspace, or cancels a pending invitation, by membership_id (from heliyos_team_members_list). They lose access immediately. This cannot be undone (they would need a new invitation): confirm with the user first. The last owner cannot be removed. Returns structuredContent {membership_id, removed}.
Inputs: membership_id (required). Returns: removed, membership_id
heliyos_triggers_listList worker triggersARead-onlyIdempotent
Lists the events a worker can subscribe to (the names to put in an event trigger's events on heliyos_workers_create / heliyos_workers_update), each with what it means and the object it is about. Also lists the mention and schedule kinds. Call it before creating a worker that reacts to events. Returns every trigger in one page. Returns structuredContent {triggers:[{name, kind, label, description, object_type, ...}]}.
Inputs: kind, object_type. Returns: triggers
heliyos_usage_getGet credit usageARead-onlyIdempotent
Lists the workspace's credit usage, newest first: when credits were used, by which feature (company_enrichment, worker_run, scout, ...), how many, and on which record. Filter by date range, feature, record or text. Read-only: usage and credits cannot be changed via the API. Returns structuredContent {entries:[{at, feature, credits, record_id}], page_credits, total_entries, next_cursor}.
Inputs: to, from, limit, cursor, +4 more. Returns: entries, next_cursor, page_credits, total_entries
heliyos_watchlist_getGet the watchlistARead-onlyIdempotent
Lists the companies on the watchlist (the accounts the workers monitor with Scouts and keep enriched), most recently created records first (not by watch date), with their ids, names and key fields. "detailed" also returns watchlist statistics on the first page: tasks done, deals, meetings and actions across watched companies. Use heliyos_companies_watch / _unwatch to change it. Returns structuredContent {companies:[{id, name, fields}], statistics?, next_cursor}.
Inputs: limit, cursor, response_format. Returns: companies, statistics, next_cursor
heliyos_workers_createCreate a workerA
Creates a custom worker (AI agent) with a name, instructions and, optionally, triggers that start it: on every new task, when mentioned in chat, on named events, or on a cron schedule. It starts active unless is_active is false, and its runs use credits and can change records or send email (consequential actions wait for approval in Heliyos), so confirm with the user first. Names are unique; a repeat fails with CONFLICT. Before calling: heliyos_triggers_list for valid event names and heliyos_workers_tools_list for the tool_names it may use (both are checked; unknown names are refused). Files are configured in the Heliyos web app. Returns structuredContent {worker}.
Inputs: name (required), instructions (required), triggers, is_active, +4 more. Returns: worker
heliyos_workers_deleteDelete a workerADestructiveIdempotent
Permanently deletes one custom worker by id and its schedules. Default (built-in) workers cannot be deleted; pause them with heliyos_workers_update is_active false. Past runs are kept. This cannot be undone: confirm with the user first. Returns structuredContent {worker_id, deleted}.
Inputs: worker_id (required). Returns: deleted, worker_id
heliyos_workers_getGet a workerARead-onlyIdempotent
Fetches one worker by id: name, type, active flag, description, triggers and instructions (cut at 1500 characters in concise). "detailed" adds the full instructions, the tools it may call, read-only and memory flags, file scope and times. Returns structuredContent {worker}.
Inputs: worker_id (required), response_format. Returns: worker
heliyos_workers_listList workersARead-onlyIdempotent
Lists the workspace's workers (AI agents): the built-in default ones and custom ones, each with its id, type, active flag, description and triggers. Returns every worker in one page (a workspace has a handful). Use heliyos_workers_get for a worker's instructions, heliyos_runs_list with worker_id for its runs. Returns structuredContent {workers:[{id, name, type, is_active, ...}]}.
Inputs: type, is_active, response_format. Returns: workers
heliyos_workers_tools_listList tools a worker can useARead-onlyIdempotent
Lists the tools a worker may be given (the names to put in tool_names on heliyos_workers_create / heliyos_workers_update): Heliyos's own tools (source builtin) and the actions of the workspace's connected integrations (source action, for example sending email through the connected mailbox). Each has a risk class; communicate, write_crm and external tools do things people will want to review. Call it before creating a worker. Returns every tool in one page. Returns structuredContent {tools:[{name, label, description, source, risk, provider}]}.
Inputs: search, source, provider, response_format. Returns: tools
heliyos_workers_updateUpdate a workerAIdempotent
Changes a worker by id; what you leave out is kept. Custom workers: name, instructions, description, is_active, read_only, memory_enabled, triggers and tool_names. Default (built-in) workers: only instructions, description, is_active, memory_enabled and triggers; the rest is ignored. triggers REPLACES the worker's own triggers (a default worker keeps its built-in ones) and tool_names REPLACES its tools: pass every tool it should keep (heliyos_workers_get detailed shows the current ones, heliyos_workers_tools_list the valid names). Set is_active false to pause a worker. Returns structuredContent {worker}.
Inputs: worker_id (required), name, triggers, is_active, +5 more. Returns: worker
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 73 tools
Tools are organized by resource and action, and the descriptions explicitly differentiate near-neighbors such as records_list vs lookup vs get, records_timeline vs records_events, and global scouts vs company scouts. Some overlap remains around finding records and initiating AI work, but an agent can generally choose correctly.
Nearly all tools follow a clear heliyos_<resource>_<verb> snake_case pattern with plural resource nouns. A few actions break the create/update/delete convention, such as knowledge_entries_set, files_upload, signals_mark_read, team_members_change_role, and ask, but the overall pattern is still predictable.
With 73 tools, the surface is far beyond the well-scoped 3-15 range and exceeds the 50-tool extreme threshold. The broad workspace domain explains some breadth, but the set should be consolidated or split into narrower servers for agent usability.
Core domains have strong coverage: records, fields, tasks, notes, labels, workers, scouts, knowledge, files, team, reviews, and runs all expose appropriate read/write or lifecycle operations. Minor gaps exist, such as no custom-object schema mutation, no run cancellation, and no file update operation, but they are mostly workaroundable.
Maintenance
Related MCP Connectors
CRM, inbox, meetings, revenue intelligence, analytics and automations for AI agents.
AI CRM: accounts, deals, meetings and agents, with approvals before anything is sent.
Give your AI agent 75+ business tools: tasks, projects, CRM, forms, E-Sign, team comms, automations.
Open-source CRM for AI agents: humans, orgs, interactions, deals, tasks, links and an activity log.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to interact with a CRM covering companies, people, leads, deals, and more, with role checks, scoped agent keys, approval gates, and a shared audit trail.AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to retrieve customer, order, ticket, policy, and agreement information, and to prepare or execute state-changing support actions like escalations and follow-ups with confirmation and access control.-
- AlicenseBqualityCmaintenanceEnables LLM agents to operate a CRM through 114 typed tools across 24 modules, covering contacts, pipelines, calendars, messaging, invoicing, and payments. Destructive and outward-facing actions are annotated for visibility and approval.114MIT
- FlicenseNot gradedqualityAmaintenanceEnables AI assistants to interact with CRM contacts, companies, activity, and conversations, and to perform semantic search across previously retrieved data.-