Every tool the Halyard MCP server exposes, grouped by job. Parameters list required/optional and default/enum. Enum-valued parameters link to Enums & filters. All calls run as the authorized user, scoped to their organization — see MCP server.
Identity
Section titled “Identity”| Tool | Purpose | Parameters | Returns |
|---|---|---|---|
whoami | Identify the current user, org, and connections. | (none) | user (id, email, name, accessRole, roles, isAdmin), organization (id, name, slug, billingPlan, memberCount), connections (channels, integrations, linked_accounts), authenticated_via |
find_organizations | Find organizations / companies by name. | query (opt) | matching organizations |
get_user_profile | Read a teammate’s profile and recent activity. | user_id (opt — defaults to caller), since (opt — since) | profile entry, recent activity |
update_user_profile | Update the caller’s profile entry and/or routing controls. | content (opt), sections (opt), availability (opt: ONLINE / AWAY / DND), routable (opt) — at least one | updated profile and/or the new availability / routable |
whoami takes no arguments — it reads identity from the bearer token. Call it first when an agent needs to orient before filtering by me or saving work.
Teammates & conversations
Section titled “Teammates & conversations”| Tool | Purpose | Parameters | Returns |
|---|---|---|---|
ask_expert | Ask a teammate; auto-answers from the knowledge base first, routes to a human on a miss. A human reply is evidence for a normal cited synthesis, not final copy to forward. | prompt (req), role (opt — role), skill (opt — skill), force_human (opt), options (opt — {label, value} response choices), conversation_id (opt) | discriminated union: resolved-from-KB answer, or human conversation (conversation_id, status) |
list_team | List teammates with roles, skills, and availability. | role (opt — role), skill (opt — skill), available_only (opt) | members (id, name, roles, skills, availability), match_type |
check_response | Check whether the teammate replied; can block briefly. On success, search relevant knowledge and synthesize an answer that attributes the teammate’s response. | conversation_id (req), wait (opt — blocks ≤55s) | teammate reply as evidence with attribution if any, status |
reply_to_expert | Send a follow-up in an open conversation and wait only for a newer teammate reply. Apply the same search, synthesis, attribution, and conflict rules as check_response. | conversation_id (req), message (req) | new teammate reply as evidence with attribution when received; otherwise waiting status |
get_conversation | Read the full conversation history. | conversation_id (req) | messages, status, participants |
close_conversation | Close a conversation without saving knowledge. | conversation_id (req) | closed conversation |
summarize_conversation | Save a useful teammate answer as a knowledge entry. | conversation_id (req), question (req), answer (req), source_url (opt), source_provider (opt) | created knowledge entry (enters INBOX) |
Search the knowledge base before calling ask_expert. Both ask_expert (wait) and check_response (wait) block at most 55s — see MCP server limits.
Knowledge
Section titled “Knowledge”| Tool | Purpose | Parameters | Returns |
|---|---|---|---|
search_knowledge | Semantic/keyword search over written knowledge. | query (req), type (opt — entry type), author (opt — author), since (opt — since), limit (opt, default 5), threshold (opt, default 0.55), mode (opt — search mode, default hybrid), target_type (opt), target_value (opt) | entries (id, entry_type, title, content, tags, author, similarity, relation_count, is_superseded, event_count, last_activity_at), caller_profile |
search_product_docs | Search Halyard’s own product documentation (this docs site). | query (req), limit (opt, default 5), mode (opt — search mode, default hybrid) | results (id, page, title, heading, url, content, score) |
list_knowledge | Browse a chronological mix of knowledge entries and work events. | type (opt — entry type), eventType (opt — work-event type), repo (opt), kind (opt), author (opt — author), since (opt — since), until (opt), limit (opt, default 10), offset (opt), include_content (opt, default false) | items (mixed kind:"knowledge" / kind:"event"), totals |
explore_knowledge | Traverse the relation graph around one entry. | entry_id (req), depth (opt, default 1), types (opt — relation type), format (opt, default list), include_content (opt) | related entries, relations, activity (event_count, last_activity_at, events; list format only) |
summarize_work | Save completed work, a decision, or a process learning as knowledge. | title (req), summary (req), entry_type (opt — entry type, default WORK_OUTPUT), tags (opt), session_id (opt), source_url (opt), source_provider (opt), source_knowledge_entry_id (opt), knowledge_entry_id (opt), supersedes_entry_id (opt) | created entry (enters INBOX) |
attach_artifact | Attach a rendered artifact to a knowledge entry. | knowledge_entry_id (req), format (req — HTML | CSV), content (req) | updated entry |
sync_skill | Upload a skill (SKILL.md plus companion files, verbatim) you wrote or edited in this session. Same entry as halyard skills sync. | scope (req — project | user), repo (req for project — github.com/owner/repo), relative_path (req — e.g. .claude/skills/my-skill), files (req — path, content, encoding opt utf8 | base64; one must be SKILL.md) | status (created | updated | unchanged), knowledge_entry_id, stored_files, warnings |
get_skill | Read a synced skill back: its front-matter properties and file manifest, or one file verbatim. | entry_id (req), path (opt — a file from the manifest) | without path: skill (properties, properties_raw, files with store, skill_md with verbatim); with path: file (content, encoding) |
list_work_streams | List the org’s work streams — the named pieces of work that repos, Linear projects, Slack channels and branches roll up to (resourcing and R&D attribution). Admin-declared; there is no create tool. | status (opt — active (default), closed, all) | streams (id, title, status, rd_classification, income_years, scope_count, updated_at), count |
get_work_stream | Read one work stream: its entry, R&D classification, income years, status and scope rules. | work_stream_id (req) | stream (entry, rd_classification, income_years, status, scopes with rule, value, weight, valid_from, valid_to) |
Use search_knowledge for “what do we know?” and list_knowledge for “what changed recently?”. Work events are not semantically searchable (list_events query is keyword matching) — see Knowledge vs work events.
Triage
Section titled “Triage”All triage tools key on triage_id. AI-generated entries land in the inbox with a 24h review window — see The inbox.
| Tool | Purpose | Parameters | Returns |
|---|---|---|---|
list_triage | List pending inbox items. | kind (opt — knowledge default or work_classification), state (opt, work classification only), filter (opt — all | mine | overdue; latter two knowledge only), limit (opt, default 20), offset (opt), include_content (opt, knowledge only) | entries, total; classification entries include prefixed IDs and decision details |
get_triage_item | Inspect one triage item. | triage_id (req) | full triage item |
suggest_triage_edits | Ask Halyard to propose cleanup edits. | triage_id (req), instruction (req) | suggested edits (each with message_id) |
apply_triage_suggestion | Apply a proposed edit. | triage_id (req), message_id (req) | updated item |
apply_triage_classification | Apply a classification to an inbox item. | triage_id (req), classification (req — see below), reason, title, content, tags (opt, knowledge only) | filed knowledge entry or audited work assignment |
dismiss_triage | Dismiss knowledge or reject a stream proposal, preserving history. | triage_id (req), reason (opt, knowledge only), work_stream_id (req for a work classification) | archived knowledge entry or rejected stream proposal |
delete_triage_item | Delete junk that should not remain. | triage_id (req) | deletion result |
classification is one of:
{kind: "knowledge"}— file reviewed knowledge. Addentry_type: "DECISION", for example, to change its entry type.{kind: "work_stream", work_stream_id: "stream-id"}— assign a work event.{kind: "unmatched"}— explicitly record that no stream fits the work event.
Work decisions require a work-classification:<eventId> triage ID. Knowledge filing uses
a knowledge entry ID. Missing or incompatible classifications fail without a write.
apply_triage_classification replaces accept_triage; it records the supplied decision
and does not run a classifier. Refresh cached tool discovery after deployment.
Non-admins see their own knowledge triage; admins see the org knowledge queue. Work classification reads follow event access, with decisions limited to the event actor or admin.
Activity
Section titled “Activity”| Tool | Purpose | Parameters | Returns |
|---|---|---|---|
list_events | Browse raw work events (PRs, reviews, tasks, tickets, meetings). | eventType (opt — work-event type), author (opt — author), repo (opt), query (opt — keyword/prefix match on titles and subject keys, not semantic), knowledge_entry_id (opt — only events on subjects that entry mentions or mirrors), since (opt — since), until (opt), limit (opt, default 20), offset (opt) | events (id, event_type, subject_key, source_url, source_provider, actor, occurred_at, metadata, knowledge), total |
get_delivery_metrics | Read PR delivery dashboard metrics. Admin-only. | month (opt), range (opt — 8w/3m/6m/12m trend window; 6m/12m bucket monthly) | delivery metrics |
Use events for activity questions. Do not expect semantic search results from raw event history.
People
Section titled “People”| Tool | Purpose | Parameters | Returns |
|---|---|---|---|
search_people | Search known people and contacts. | query (req), limit (opt, default 10) | matching people |
upsert_person | Create or update a person record. | email (req), displayName (opt), firstName (opt), lastName (opt), title (opt), companyName (opt), tags (opt), linkedinUrl (opt), phone (opt), timezone (opt) | person (CONTACT entry) |
find_person_by_email | Look up a person by email. | email (req) | matched person or none |
Companies
Section titled “Companies”| Tool | Purpose | Parameters | Returns |
|---|---|---|---|
upsert_company | Create or update a company record. | name (req), domain (opt), logoUrl (opt), notes (opt) | company (COMPANY entry) |
- Enums & filters — every enum value and shared filter.
- MCP server — transport, OAuth, and blocking limits.