Onyx Documentation MCP Server
Used for dependency management and running scripts to install, crawl documentation, and start the MCP server.
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., "@Onyx Documentation MCP Serversearch for examples of error handling in Onyx"
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.
Onyx MCP Server
A Model Context Protocol (MCP) server providing search and query access to Onyx programming language documentation and GitHub code examples. The server includes comprehensive crawling capabilities to populate data, but crawling is NOT accessible through the MCP interface - ensuring clean separation between data collection and query functionality.
π Quick Start
β‘ Instant Access with NPX (No Installation Required!)
Configure Claude Desktop (or other MCP-compatible LLM):
{
"mcpServers": {
"onyx": {
"command": "npx",
"args": ["@onyxlang/mcp-server", "bridge", "--url", "https://mcp.onyxlang.io"]
}
}
}π That's it! No installation, no setup, no data crawling needed. You get instant access to the latest Onyx documentation and examples.
Installation
Option 1: Install from npm (Recommended)
# Install globally
npm install -g @onyxlang/mcp-server
# Or install locally in your project
npm install @onyxlang/mcp-serverOption 2: Install from source
git clone https://github.com/onyx-lang/onyx-mcp-server.git
cd onyx-mcp-server
npm install
cp .env.example .env
# Edit .env and add your GitHub token (optional but recommended)Usage
If installed globally:
# Start MCP server
onyx-mcp server
# Start HTTP server
onyx-mcp http
# Start bridge to hosted server
onyx-mcp bridge --url https://mcp.onyxlang.io
# Crawl data (if running locally)
onyx-mcp crawl allIf installed locally or from source:
# Use npm scripts with arguments
npm start # MCP server
npm run http # HTTP server on default port (3001)
npm run http -- --port 3002 # HTTP server on custom port
npm run bridge # Bridge to default (localhost:3001)
npm run bridge -- --url https://mcp.onyxlang.io # Bridge to hosted server
npm run crawl:all # Crawl all data
# Or run directly
node src/index.js server
node src/index.js http --port 3002
node src/index.js bridge --url https://mcp.onyxlang.ioBasic Usage
# Start the MCP server (default)
npm start
# Start the HTTP server for REST API access
npm run http
npm run http -- --port 3002 # Custom port
# Start the MCP-to-HTTP bridge (connects to local or remote HTTP server)
npm run bridge
npm run bridge -- --url https://mcp.onyxlang.io # Connect to hosted server
# Run with development mode
npm run dev # MCP server
npm run http:dev # HTTP server
# Run tests
npm test
# Crawl data to populate the MCP (CLI only, not through MCP interface)
npm run crawl:allRelated MCP server: MCPDocSearch
π― Server Interface
The system provides both MCP query functionality and CLI-based crawling:
# MCP Server operations (query/search only)
node src/index.js server # Start MCP server
node src/index.js server --dev # Development mode
node src/index.js http # Start HTTP server
node src/index.js http --port 3002 # HTTP server on custom port
node src/index.js bridge # Start MCP-to-HTTP bridge
node src/index.js bridge --url https://mcp.onyxlang.io # Connect to hosted server
# Using npm scripts (with argument passing)
npm start # MCP server
npm run http # HTTP server (port 3001)
npm run http -- --port 3002 # HTTP server on custom port
npm run bridge # Bridge to localhost:3001
npm run bridge -- --url https://mcp.onyxlang.io # Bridge to hosted server
# Data crawling (CLI only - NOT accessible through MCP)
node src/index.js crawl docs # Documentation only
node src/index.js crawl github repo1 repo2 # Specific repositories
node src/index.js crawl url https://... # Single URL
node src/index.js crawl all # Everything
# Utilities
node src/index.js test # Run test suite
node src/index.js validate # Validate setupπ Project Structure
onyx_mcp/
βββ src/
β βββ bridge.js # π MCP-to-HTTP bridge for remote access
β βββ index.js # π― Unified entry point
β βββ mcp-server.js # π MCP server implementation
β βββ mcp-http.js # π MCP over HTTP server implementation
β βββ test.js # π§ͺ Test suite
β βββ validate.js # β
Setup validation
β βββ crawlers/ # π‘ Data crawlers
β β βββ docs.js # - Documentation crawler
β β βββ github.js # - GitHub repository crawler
β β βββ urls.js # - URL content crawler
β βββ core/ # π§ Core functionality
β βββ search-engine.js # - Search and indexing
βββ data/ # π Crawled data (auto-generated)
βββ .env.example # π Environment template
βββ package.json # π¦ Dependencies & scriptsπ οΈ MCP Tools Available
The server provides these read-only search and query tools to Claude:
π Documentation
search_onyx_docs- Search official documentation
π GitHub Integration
search_github_examples- Search code by topicget_onyx_functions- Function definitions from GitHubget_onyx_structs- Struct definitions from GitHublist_github_repos- List available repositories
π Unified Search
search_all_sources- Search across all data sources
π Code Execution
run_onyx_code- Execute Onyx code and return output/errors for testing and debuggingrun_wasm- Execute WebAssembly code and return output/errors for testing and debuggingbuild_onyx_code- Build Onyx code file using "onyx build" in a specified directoryonyx_pkg_build- Build an Onyx package using "onyx pkg build" in a specified directory
β οΈ Important Note
Crawling tools are available through the CLI but intentionally NOT accessible through the MCP interface. This ensures clean separation between data collection and query functionality.
π§ Configuration
Environment Variables (.env)
# GitHub token (recommended for higher rate limits)
GITHUB_TOKEN=your_github_token_here
# Optional settings
DEBUG=false
MAX_CRAWL_LIMIT=50π Claude Desktop Integration
You can connect to the Onyx MCP in multiple ways:
β‘ Option 1: NPX Bridge (Zero Installation)
For hosted server (always up-to-date):
{
"mcpServers": {
"onyx": {
"command": "npx",
"args": ["@onyxlang/mcp-server", "bridge", "--url", "https://mcp.onyxlang.io"]
}
}
}Option 2: Local MCP Server (For Development)
{
"mcpServers": {
"onyx": {
"command": "node",
"args": ["/path/to/onyx_mcp/src/index.js", "server"]
}
}
}Option 3: Connect to Custom Hosted Server via Bridge
{
"mcpServers": {
"onyx": {
"command": "node",
"args": ["/path/to/onyx_mcp/src/index.js", "bridge", "--url", "https://mcp.onyxlang.io"],
}
}
}Option 4: Local HTTP Server + Bridge
For testing the bridge locally:
Start the HTTP server:
npm run http --port 3002Configure Claude Desktop to use the bridge:
{ "mcpServers": { "onyx": { "command": "node", "args": ["/path/to/onyx_mcp/src/index.js", "bridge", "--url", "http://localhost:3002"] } } }
For Development (Local Setup)
Clone and setup:
git clone <repository> cd onyx_mcp npm install cp .env.example .envPopulate data:
npm run crawl:allStart MCP server:
npm startConfigure Claude Desktop with local server (see integration section above)
For Production (Hosted Server)
Clone and setup:
git clone <repository> cd onyx_mcp npm installStart HTTP server:
npm run httpConfigure Claude Desktop with bridge (see integration section above)
Bridge Architecture
The bridge allows you to connect the MCP protocol to HTTP servers:
Claude Desktop β MCP Bridge β HTTP Server (Local or Remote)Benefits:
β Connect to hosted Onyx MCP at
mcp.onyxlang.ioβ No need to run local server or populate data
β Always up-to-date with latest Onyx information
β Same MCP interface, different backend
β Easy switching between local and remote servers
π Code Testing & Feedback Loop
The code execution tools enable Claude to test, build, and refine Onyx code through iterative feedback:
Available Tools:
run_onyx_code- Execute code in sandbox for quick testingbuild_onyx_code- Build code files in user's specified directoryonyx_pkg_build- Build complete Onyx packages in user's project directory
How it Works:
Claude writes Onyx code based on your requirements
Tests with
run_onyx_codefor quick validation (sandbox)Builds with
build_onyx_codein your project directoryReads build/compilation errors from the output
Analyzes and fixes issues - syntax, imports, dependencies
Builds packages with
onyx_pkg_buildin your project directoryRepeats until success - working, compiled code in your directory!
Example Workflows:
Quick Testing:
User: "Write a function to calculate fibonacci numbers"
1. Claude writes initial code
2. Tests with run_onyx_code (sandbox)
3. Sees errors and fixes them
4. Code runs successfullyProject Building:
User: "Build this code in my project at /home/user/myproject"
1. Claude uses build_onyx_code with directory: "/home/user/myproject"
2. Sees build errors and fixes imports
3. Creates working executable in user's directory
4. User can run the built program directlyPackage Development:
User: "Build my Onyx package in /home/user/onyx-lib"
1. Claude uses onyx_pkg_build with directory: "/home/user/onyx-lib"
2. Fixes package configuration issues
3. Creates complete built package in user's directory
4. User can distribute/use the packageBenefits:
β Self-correcting code - Claude can fix its own mistakes
β Real validation - Actually runs the code, not just syntax checking
β Learning from errors - Improves suggestions based on Onyx compiler feedback
β Iterative refinement - Keeps improving until code works perfectly
β Confidence in results - You know the code actually compiles and runs
Requirements:
Onyx compiler must be installed and available in PATH
Install from: https://onyxlang.io/
The tool executes code in a sandboxed temporary directory
Default timeout of 10 seconds (configurable) prevents infinite loops
π Data Sources & Crawling
The system includes comprehensive crawling capabilities to populate data:
π Documentation Sources
Official Onyx documentation
Tutorial and guide files
API documentation
Language reference materials
π GitHub Sources
Onyx language repositories
Code examples and tutorials
Package and library documentation
Configuration files and project setups
π Supported File Types
.onyxsource files.kdlconfiguration filesREADME, documentation, and guide files
HTML documentation pages
Package configurations (
onyx.pkg, etc.)
π Data Population Process
Use CLI crawling commands to populate the
data/directoryMCP server searches the pre-crawled data
No crawling triggers are available through the MCP interface
π‘ Enhanced GitHub Crawling
The GitHub crawler extracts comprehensive content:
π Documentation:
README.md, LICENSE, CHANGELOG.md
All documentation in
docs/foldersHTML documentation and web pages
Tutorial and guide files
π§ Configuration:
.kdlfiles (Onyx project management)onyx.pkgand package configurationsTOML, YAML, JSON configs
π» Source Code:
All
.onyxsource filesExample and tutorial files
HTML examples and web interfaces
π Web Content:
HTML documentation pages
Interactive examples and demos
Web-based tutorials and guides
API documentation in HTML format
Repository Management
# Crawl specific repositories
node src/index.js crawl github onyx-lang/onyx user/project
# With various URL formats
node src/index.js crawl github \
https://github.com/onyx-lang/onyx \
github.com/user/repo \
owner/projectπ§ͺ Testing & Validation
# Quick validation
npm run validate
# Full test suite
npm test
# Expected results: 100% pass rateTests validate:
β File structure integrity
β Module import functionality
β Data directory operations
β Crawler configurations
β Search engine error handling
π‘ Usage Examples
Once connected to Claude Desktop:
"Show me examples of HTTP requests in Onyx"
"How do I define a struct with KDL configuration?"
"What are the available string manipulation functions?"
"Find PostgreSQL ORM examples in Onyx repositories"π§ Configurable Context System
Global Context Message
All MCP tool responses include a configurable context message that can be easily modified at the top of src/mcp-server.js:
// =============================================================================
// CONFIGURABLE CONTEXT MESSAGE
// =============================================================================
// This message will be prepended to all MCP tool responses.
// Modify this section to customize the context provided to the assistant.
const GLOBAL_CONTEXT_MESSAGE = `You are assisting with Onyx programming language queries...`;This allows you to:
Customize the assistant's context for Onyx queries
Provide consistent guidance across all tool responses
Easily update instructions without modifying individual tools
Maintain context coherence throughout conversations
π Key Design Principles
Security & Separation of Concerns
MCP interface is read-only - cannot trigger crawling or data modification
Crawling available through CLI - full control over data collection
Clean architecture - data collection separate from query functionality
No external API calls through MCP tools
Enhanced User Experience
Consistent context across all responses
Tool-specific messaging for clarity
Comprehensive error handling with context
Legacy compatibility for existing workflows
π Data Flow
CLI Crawling Commands populate data sources in
data/directorySearch Engine indexes and provides unified search capabilities
MCP Server exposes read-only search tools to Claude
Claude receives contextual responses with configurable messaging
Context System ensures consistent, helpful guidance in all responses
No crawling triggers available through MCP interface
π Performance
Efficient caching prevents unnecessary re-crawling
Rate limiting respects API limits
Parallel processing for multiple repositories
Comprehensive error handling for reliability
This MCP server provides Claude with secure, read-only access to Onyx programming language knowledge through a configurable context system. Comprehensive crawling capabilities are available through CLI commands but intentionally not accessible through the MCP interface, ensuring clean separation between data collection and query functionality.
Available Tools
10 toolsbuild_onyx_codeC
Build Onyx code file using "onyx build" in a specified directory
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Onyx code to build | |
| filename | No | Filename for the Onyx file | main.onyx |
| directory | No | Directory to build in (defaults to current working directory) | . |
| timeout | No | Build timeout in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the build command and directory specification but lacks details on permissions needed, whether it modifies files or creates outputs, error handling, or rate limits. For a tool with 4 parameters and no annotations, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary details. Every word earns its place, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, no annotations, no output schema), the description is incomplete. It doesn't explain what the build output entails (e.g., compiled files, errors), behavioral traits like side effects, or how it differs from sibling tools. This leaves gaps for an AI agent to correctly invoke and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds minimal value beyond the schema by implying the build occurs in a specified directory, but it doesn't provide additional context like parameter interactions or usage examples. Baseline 3 is appropriate as the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('build') and resource ('Onyx code file'), specifying the command 'onyx build' and location context. It distinguishes from siblings like 'run_onyx_code' by focusing on compilation rather than execution, though it doesn't explicitly contrast with 'onyx_pkg_build' which might have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. The description implies usage for building Onyx code, but it doesn't mention when to choose this over 'run_onyx_code' (for execution) or 'onyx_pkg_build' (for package builds), leaving the agent to infer context without clear exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_onyx_functionsC
Get Onyx function definitions and examples from GitHub
| Name | Required | Description | Default |
|---|---|---|---|
| functionName | No | Function name to search for (optional) | |
| limit | No | Maximum number of examples |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states what the tool does without behavioral details. It doesn't disclose if this is a read-only operation, how it handles errors, rate limits, or authentication needs, which are critical for a tool interacting with GitHub.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste, front-loaded with the core purpose. It's appropriately sized for a simple retrieval tool, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete. It doesn't explain what 'definitions and examples' include (e.g., code snippets, metadata), return format, or error handling, leaving gaps for a tool with external dependencies like GitHub.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters. The description adds no additional meaning beyond implying a search capability with 'functionName', but doesn't clarify semantics like search behavior or example types. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('Onyx function definitions and examples'), specifying the source ('from GitHub'). It distinguishes from siblings like 'search_onyx_docs' or 'search_github_examples' by focusing on function definitions, but could be more specific about what 'definitions' entail (e.g., code, metadata).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'search_ithub_examples' or 'get_onyx_structs' is provided. The description implies a retrieval function, but lacks context on scenarios or prerequisites, leaving usage unclear relative to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_onyx_structsC
Get Onyx struct definitions and examples from GitHub
| Name | Required | Description | Default |
|---|---|---|---|
| structName | No | Struct name to search for (optional) | |
| limit | No | Maximum number of examples |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves data from GitHub but doesn't mention rate limits, authentication needs, error handling, or the format of returned data (e.g., raw JSON, structured examples). This leaves significant gaps for a tool interacting with an external service.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and avoids unnecessary details, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of fetching data from GitHub, lack of annotations, and no output schema, the description is incomplete. It doesn't explain what 'definitions and examples' entail, how results are structured, or any behavioral traits like pagination or errors, leaving the agent under-informed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents both parameters ('structName' and 'limit') with descriptions and defaults. The description adds no additional meaning beyond implying a search functionality, which is already suggested by the schema. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('Onyx struct definitions and examples from GitHub'), making the purpose understandable. However, it doesn't distinguish this tool from sibling tools like 'get_onyx_functions' or 'search_github_examples', which likely have overlapping domains, so it misses full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_onyx_functions', 'search_github_examples', and 'search_onyx_docs', there's no indication of scope, prerequisites, or exclusions, leaving the agent to guess based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_github_reposB
List all discovered GitHub repositories with Onyx code
| Name | Required | Description | Default |
|---|---|---|---|
| sortBy | No | Sort repositories by | stars |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool lists repositories but doesn't disclose behavioral traits such as whether it's a read-only operation, potential rate limits, authentication needs, pagination behavior, or what 'discovered' implies (e.g., cached vs. real-time). This leaves significant gaps for safe and effective use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('List all discovered GitHub repositories with Onyx code'). It wastes no words and is appropriately sized for a simple listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 optional parameter, no output schema, no annotations), the description is minimally adequate. It states what the tool does but lacks details on behavior, usage context, or output format, which are needed for full completeness. The high schema coverage helps, but gaps in guidelines and transparency keep it at a baseline level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with a well-documented 'sortBy' parameter including enum values and a default. The description adds no parameter-specific information beyond what the schema provides, so it meets the baseline of 3 without adding extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('GitHub repositories'), and specifies the scope ('with Onyx code'). However, it doesn't differentiate from sibling tools like 'search_github_examples' or 'search_all_sources' that might also involve GitHub repositories, leaving some ambiguity about when this specific listing tool is preferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'search_github_examples' or 'search_all_sources'. It mentions 'discovered' repositories but doesn't explain what that means or any prerequisites for usage, leaving the agent to guess about context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onyx_pkg_buildC
Build an Onyx package using "onyx pkg build" in a specified directory
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Directory containing the Onyx package (defaults to current working directory) | . |
| timeout | No | Build timeout in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool builds a package, implying a write/mutation operation, but does not disclose behavioral traits like whether it modifies files, requires specific permissions, has side effects, or handles errors. This is inadequate for a build tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose and method. It is front-loaded with the core action and includes no unnecessary details, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a build operation, no annotations, and no output schema, the description is incomplete. It lacks information on what the build does (e.g., compiles code, creates artifacts), potential outputs, error handling, or dependencies, which are critical for an AI agent to use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('directory' and 'timeout') with descriptions and defaults. The description does not add any meaning beyond what the schema provides, such as explaining the build process or parameter interactions, but the baseline is 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Build an Onyx package') and the method ('using "onyx pkg build"'), which is specific and actionable. However, it does not explicitly differentiate from sibling tools like 'build_onyx_code' or 'run_onyx_code', leaving some ambiguity about when to use this versus those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'build_onyx_code' or 'run_onyx_code'. It mentions the directory parameter but does not specify prerequisites, such as requiring an Onyx package structure or dependencies, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_onyx_codeB
Execute Onyx code and return the output/errors for testing and debugging
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Onyx code to execute | |
| filename | No | Optional filename (defaults to temp.onyx) | temp.onyx |
| timeout | No | Execution timeout in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that the tool executes code and returns output/errors, but it lacks details on execution environment, security implications, error handling, or performance characteristics. For a code execution tool without annotations, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function and purpose without unnecessary words. It is front-loaded with the core action and outcome, making it easy to understand quickly. Every part of the sentence earns its place by conveying essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (code execution with potential side effects), lack of annotations, and no output schema, the description is minimally adequate. It covers the basic purpose but fails to address critical aspects like execution safety, error formats, or output structure. For a tool in this context, more completeness is needed to guide effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, clearly documenting the parameters (code, filename, timeout) with their types and defaults. The description does not add any additional semantic meaning beyond what the schema provides, such as explaining parameter interactions or constraints. Baseline score of 3 is appropriate as the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute Onyx code') and the outcome ('return the output/errors for testing and debugging'), making the purpose evident. However, it does not explicitly differentiate this tool from its sibling 'build_onyx_code', which might also involve code execution or compilation, leaving some ambiguity in sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'for testing and debugging', which provides a general context for usage, but it does not specify when to use this tool versus alternatives like 'build_onyx_code' or 'run_wasm'. No explicit guidance on prerequisites, exclusions, or comparisons with siblings is provided, limiting its utility for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_wasmC
Execute a WebAssembly (WASM) file using "onyx run file.wasm" command
| Name | Required | Description | Default |
|---|---|---|---|
| wasmPath | Yes | Path to the WASM file to execute | |
| directory | No | Directory to run the command from (defaults to current working directory) | . |
| timeout | No | Execution timeout in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the action without disclosing behavioral traits. It doesn't mention execution environment, permissions needed, side effects, error handling, or output format. For a tool that executes code, this lack of transparency is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action and includes the command syntax. There's zero wasteβevery word contributes directly to understanding the tool's purpose and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a code execution tool with no annotations and no output schema, the description is incomplete. It lacks details on execution behavior, safety, output, or error handling. Given the complexity of running WASM files, more context is needed to help an agent use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters. The description adds no parameter-specific information beyond implying 'wasmPath' in the command example. This meets the baseline of 3 since the schema does the heavy lifting, but the description doesn't enhance understanding of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute') and resource ('a WebAssembly (WASM) file'), specifying the exact command used ('onyx run file.wasm'). It distinguishes from siblings like 'run_onyx_code' by focusing on WASM files rather than general Onyx code. However, it doesn't explicitly contrast with all siblings, so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'run_onyx_code' or other siblings. It mentions the command syntax but doesn't explain use cases, prerequisites, or exclusions, leaving the agent to infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_all_sourcesC
Search all crawled content (docs, GitHub, URLs)
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| sources | No | Sources to search in | |
| limit | No | Maximum number of results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'crawled content' but doesn't disclose behavioral traits such as whether this is a read-only operation, how results are ranked, if there are rate limits, or what the output format looks like. The description is too vague to provide meaningful behavioral context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Search all crawled content') with clarifying examples. There is zero waste, and every word earns its place by specifying the scope and types of content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a search tool with 3 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what the tool returns, how results are structured, or any limitations (e.g., search scope, performance). The agent lacks sufficient context to use this tool effectively beyond basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters (query, sources, limit) with descriptions and defaults. The description adds no additional meaning beyond what the schema provides, such as explaining how the query is processed or what 'sources' like 'docs' and 'github' entail. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Search') and resource ('all crawled content') with specific examples ('docs, GitHub, URLs'). It distinguishes from siblings like search_github_examples and search_onyx_docs by indicating it searches across multiple sources. However, it doesn't explicitly mention what 'crawled content' entails beyond the examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like search_github_examples or search_onyx_docs. It mentions 'all crawled content' but doesn't specify if this is for broad searches versus more targeted ones, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_github_examplesC
Search Onyx code examples from GitHub repositories by topic
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Topic to search for | |
| limit | No | Maximum number of examples |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While it states the search action, it doesn't describe what the tool returns (e.g., format, structure), whether it performs real-time queries or uses cached data, or any limitations like rate limits or authentication requirements for GitHub access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core functionality and appropriately sized for a simple search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the search results look like (e.g., list of examples with metadata), how results are sorted or filtered, or any behavioral nuances. For a search tool with no structured output documentation, this leaves significant gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, clearly documenting both parameters ('topic' and 'limit') with their types and purposes. The description adds no additional parameter information beyond what the schema provides, so it meets the baseline of 3 for adequate schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search') and target ('Onyx code examples from GitHub repositories by topic'), making the purpose understandable. However, it doesn't differentiate this tool from sibling tools like 'search_all_sources' or 'search_onyx_docs', which appear to have overlapping search functionality but different targets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'search_all_sources' and 'search_onyx_docs' available, there's no indication of what makes this tool distinct or when it should be preferred over those options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_onyx_docsB
Search official Onyx programming language documentation
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query for documentation | |
| limit | No | Maximum number of results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but offers minimal information. It states the search scope ('official Onyx programming language documentation') but doesn't describe response format, pagination, error conditions, authentication needs, or rate limits. For a search tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a simple search tool and front-loads the essential information (search action and target resource).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 2 parameters (100% schema coverage) but no annotations and no output schema, the description is minimally adequate. It specifies the search domain but lacks information about return values, error handling, and behavioral constraints. The description meets basic requirements but doesn't compensate for the missing structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('query' and 'limit') adequately. The description doesn't add any parameter-specific information beyond what's in the schema, such as query syntax examples or limit constraints. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Search') and resource ('official Onyx programming language documentation'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'search_all_sources' or 'search_github_examples', but the specificity about 'Onyx programming language documentation' provides some implicit distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'search_all_sources' or 'search_github_examples'. It doesn't mention prerequisites, limitations, or comparative advantages, leaving the agent to infer usage context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
- First observed
build_onyx_code - First observed
get_onyx_functions - First observed
get_onyx_structs - First observed
list_github_repos - First observed
onyx_pkg_build - First observed
run_onyx_code - First observed
run_wasm - First observed
search_all_sources - First observed
search_github_examples - First observed
search_onyx_docs
TDQS
Scored across 10 tools
Most tools have distinct purposes, but there is some overlap between search_all_sources, search_github_examples, and search_onyx_docs, which could cause confusion about which to use for specific search needs. The build and run tools are clearly differentiated by their actions and targets.
The naming follows a consistent verb_noun pattern with snake_case throughout, such as build_onyx_code and run_onyx_code. However, there is a minor deviation with onyx_pkg_build, which uses a slightly different structure (noun_verb) compared to the others.
With 10 tools, the count is well-scoped for a documentation and development server, covering building, running, searching, and retrieving information without being overwhelming. Each tool appears to serve a specific function in the Onyx ecosystem.
The toolset provides good coverage for documentation, code execution, and package management, but there are minor gaps such as no tools for updating or deleting resources, or handling configuration. However, the core workflows for development and documentation search are adequately supported.
Maintenance
Related MCP Connectors
Versioned documentation registry and semantic search for AI tools and coding assistants.
Search @imqueue docs and scaffold typed services & clients from your AI coding agent.
Provide your AI coding tools with token-efficient access to up-to-date technical documentation forβ¦
Search NVIDIA CUDA documentation and code samples from AI coding agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceScrapes and indexes documentation websites to provide AI assistants with searchable access to documentation content, API references, and code examples through configurable URL crawling.-
- AlicenseNot gradedqualityNot gradedmaintenanceCrawls documentation websites and provides semantic search capabilities over the content through vector embeddings, enabling natural language queries of technical documentation.2-
- FlicenseAqualityDmaintenanceEnables semantic search across multiple AI library documentations to keep coding assistants up-to-date.11-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to query and retrieve topic-specific knowledge from recursively crawled and indexed web pages.56811MIT