Documentation
Connect your AI agents to human experts via the Model Context Protocol (MCP).
Getting Started
Halyard integrates with Claude Code, Claude Desktop, OpenAI Codex, Cursor, Windsurf, and any MCP-compatible AI tool. Once connected, your AI agents can consult human experts in real-time via Slack.
Sign up and connect Slack
Create an account at app.usehalyard.ai and connect your Slack workspace. Add team members and assign roles (engineer, designer, pm, architect) and skills.
Install the MCP server
Add Halyard to your AI tool of choice. See the Installation section for setup instructions per client.
Authenticate
When your AI tool connects, you'll be prompted to log in and authorize access via OAuth. Your agent will then have access to consult experts in your organization.
- An Halyard account with a connected Slack workspace
- At least one expert configured in your team
Installation
Choose your AI client below. The MCP server endpoint is:
https://mcp.usehalyard.ai MCP Claude Code Recommended
Install via the plugin marketplace:
/plugin marketplace add halyard-labs/claude-plugin-marketplace
/plugin install ask-expert@halyard-labs
When prompted, authorize with your Halyard account. The plugin handles OAuth automatically.
Claude will then proactively use ask_expert when it encounters ambiguity or needs human judgment.
Enable for your entire team
Instead of having each teammate install manually, add the plugin to your repo's .claude/settings.json. This enables it automatically for anyone who opens the project in Claude Code:
{
"enabledPlugins": {
"ask-expert@halyard-labs": true
},
"extraKnownMarketplaces": {
"halyard-labs": {
"source": {
"source": "github",
"repo": "halyard-labs/claude-plugin-marketplace"
}
}
}
} Commit this file to your repo. Teammates will get the plugin enabled on their next session without any manual setup.
OpenAI Codex
Add Halyard as a remote MCP server in your project's codex.json:
{
"mcpServers": {
"halyard": {
"type": "http",
"url": "https://mcp.usehalyard.ai"
}
}
} On first use, Codex will redirect you to Halyard for OAuth authorization. Codex discovers the available tools automatically.
Claude Desktop, Cursor & Windsurf
Add the following to your MCP client configuration file:
{
"mcpServers": {
"halyard": {
"type": "http",
"url": "https://mcp.usehalyard.ai"
}
}
} ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows).cursor/mcp.json in your project root~/.codeium/windsurf/mcp_config.jsonAny MCP Client
Halyard exposes a standard Model Context Protocol server over HTTP with OAuth 2.0 authentication.
Point your MCP client at https://mcp.usehalyard.ai. Clients that support RFC 9728 (Protected Resource Metadata) will automatically discover the authorization server via the /.well-known/oauth-protected-resource endpoint.
For manual setup, the authorization server is located at https://api.usehalyard.ai.
{
"type": "http",
"url": "https://mcp.usehalyard.ai"
} Configuration
After installing the MCP server, configure your team in the Halyard dashboard.
Experts
Add team members as experts and assign them roles and skills. When an AI agent asks a question, Halyard routes it to the most relevant available expert based on these attributes.
engineer, designer, pm, architect. Use when the question is about a general domain.payments, auth, infra. Use when the question is about a particular system or technology.Knowledge Base
Halyard builds an organizational knowledge base from summarized conversations. When an agent asks a question that has been answered before, it can retrieve the answer without contacting an expert. Use the summarize_conversation, search_knowledge, and list_knowledge tools to build and query this knowledge base.
Available Tools
Once connected, your agent gains access to these tools. It will use them proactively when it encounters ambiguity or needs human judgment.
list_experts read-only
Discover available human experts you can consult. Call this first to see who is available and their roles/skills. Optionally filter by role or skill.
role string, optional Filter experts by role (e.g. "engineer", "designer") skill string, optional Filter experts by skill (e.g. "payments", "auth") available_only boolean, optional Only return experts not set to Do Not Disturb ask_expert creates conversation Send a question to a human expert via Slack. Specify a role or skill to route to the right person. Optionally provide response options for quick answers.
prompt string, required The question or request to send to the expert role string, optional The role of the expert to contact skill string, optional The skill the expert should have options array, optional Response options for the expert to choose from conversation_id string, optional Resume waiting on an existing conversation check_response read-only Check if an expert has responded to your question. Can optionally wait up to 55 seconds for a response.
conversation_id string, required The conversation ID from ask_expert wait boolean, optional If true, wait up to 55 seconds for a response get_conversation read-only Retrieve the full conversation history with all messages exchanged between the agent and expert.
conversation_id string, required The conversation ID from ask_expert reply_to_expert sends message Send a follow-up message in an existing conversation. Use this for clarifying questions or providing additional context.
conversation_id string, required The conversation ID from ask_expert message string, required Your message to the expert summarize_conversation builds knowledge Save a structured summary of what was learned from an expert. This builds an organizational knowledge base that helps answer similar questions in the future without bothering experts again.
conversation_id string, required The conversation ID to summarize question string, required The question or context that was asked answer string, required The answer or guidance provided by the expert summarize_work builds knowledge Save a summary of significant agent work to the knowledge base. Use this after completing meaningful work like implementing features, making architectural decisions, or documenting processes.
title string, required A concise title for the work summary string, required Detailed summary of what was done tags string[], optional Tags for categorizing the work entry_type string, optional Type of entry: "WORK_OUTPUT" (default), "DECISION", or "PROCESS" session_id string, optional Link this work to a specific agent session search_knowledge read-only Search the organizational knowledge base using semantic similarity. Returns past decisions, Q&A answers, work summaries, and documentation.
query string, required Natural language search query limit number, optional Maximum number of results (default: 5) type string, optional Filter by entry type: "QA", "WORK_OUTPUT", "DECISION", "PROCESS" author string, optional Filter by author. Use "me" for your own entries, or a user ID. since string, optional Filter by time: "today", "yesterday", "this week", "7d", "30d", "90d", or ISO date list_knowledge read-only List recent knowledge base entries. Use to see what the team or a specific person has been working on.
type string, optional Filter by entry type: "QA", "WORK_OUTPUT", "DECISION", "PROCESS" author string, optional Filter by author. Use "me" for your own entries, or a user ID. since string, optional Filter by time: "today", "yesterday", "this week", "7d", "30d", "90d", or ISO date limit number, optional Maximum number of entries to return (default: 10) close_conversation modifies state
Close a conversation without adding a summary. Use summarize_conversation instead if you want to capture knowledge.
conversation_id string, required The conversation ID to close Usage Examples
Architecture Decision
An AI agent needs guidance on authentication strategy while refactoring a login flow.
list_experts(role: "architect") ask_expert(
prompt: "Should I use JWT tokens or session-based auth for the new login flow?
The current codebase uses express-session.",
role: "architect"
) check_response(conversation_id: "conv_123", wait: true) summarize_conversation(
conversation_id: "conv_123",
question: "JWT vs session auth for new login flow",
answer: "Use JWT for the new auth system. Team decided to migrate away
from sessions for better horizontal scaling."
) Design Clarification
An AI agent implementing a feature needs to clarify UI requirements with the design team. Provide response options so the expert can quickly tap to respond.
ask_expert(
prompt: "For the error state on the payment form, should I show
the error inline or as a toast notification?",
role: "designer",
options: [
{ label: "Inline error", value: "inline" },
{ label: "Toast notification", value: "toast" },
{ label: "Both", value: "both" }
]
) The expert sees the options in Slack and can quickly tap to respond, or provide a custom answer.
Multi-turn Conversation
Sometimes you need a back-and-forth discussion with an expert.
ask_expert(
prompt: "How should I handle rate limiting from the Stripe API?",
skill: "payments"
)
// Returns: conversation_id: "conv_456" reply_to_expert(
conversation_id: "conv_456",
message: "Should I also add failed requests to a dead-letter queue?"
) summarize_conversation(
conversation_id: "conv_456",
question: "Handling Stripe rate limits",
answer: "Use exponential backoff + jitter. After 3 retries,
push to DLQ. Use packages/queue/retry.ts and DLQ helpers."
) Best Practices
Always call list_experts first
Before asking a question, check who's available and what roles/skills exist. This helps route questions to the right person and avoids sending messages to unavailable team members.
Use role OR skill, not both
Specifying both role and skill can be overly restrictive. Pick the most relevant dimension for your question. Use role for general domain questions and skill for specific technology questions.
Always summarize good answers
Calling summarize_conversation after receiving a helpful response builds your organization's knowledge base. Future questions may be answered automatically via search_knowledge without bothering experts.
Provide context in your questions
Experts give better answers when they understand the context. Include relevant details about what you're building, what you've already tried, and why you need guidance.
Use response options for simple choices
When your question has a small set of possible answers, pass options to ask_expert. This lets the expert respond with a single tap in Slack, reducing friction and response time.
Support
We're here to help you get the most out of Halyard.