An MCP server that enables executing arbitrary TypeScript code in a WebAssembly sandbox with access to downstream MCP tools as functions. Dramatically reduces token consumption by processing data in the sandbox rather than passing everything through context.
Runbyte exposes 3 tools with mixed quality. Tool names follow verb_noun convention (execute_code, list_directory, read_file) and are action-oriented. However, schema definitions are incomplete, parameter descriptions lack specificity, and output schemas are not documented. The execute_code tool has an exceptionally detailed description (650+ chars) that serves as extensive documentation, but this pattern is not replicated for other tools. Parameter types are defined in Go struct tags but not fully visible in MCP schema presentation. Error handling and recovery guidance are absent. The tools themselves are well-intentioned (filesystem discovery, code execution, file reading) but lack the polish and LLM-optimization of production-grade agents.
Execute TypeScript code that calls MCP tools as functions. Process data in the sandbox, chain multiple operations, and use the workspace for multi-step workflows. Your code must export an exec() function as the entry point: async function exec() { // Your workflow here return result; } The exec() function: - Required entry point (async or sync) - Returns any JSON-serializable value - Has access to all MCP servers as typed modules - Can read/write workspace for persistent data Import MCP servers as TypeScript modules: import * as github from './servers/github'; import * as slack from './servers/slack'; import * as fs from '@runbyte/fs'; Single-step example: import * as github from './servers/github'; async function exec() { const repos = await github.listRepos({ owner: "octocat" }); return repos.filter(r => r.stargazers_count > 100); } Multi-step workflow example (process in sandbox, store intermediate results): import * as github from './servers/github'; import * as slack from './servers/slack'; import * as fs from '@runbyte/fs'; async function exec() { // Fetch data const repos = await github.listRepos({ owner: "myorg" }); // Process in sandbox (doesn't pass through your context) const active = repos.filter(r => r.open_issues_count > 5); // Store full data for later fs.writeFile("./workspace/repos.json", JSON.stringify(active)); // Get detailed info for each const details = []; for (const repo of active) { const issues = await github.listIssues({ owner: "myorg", repo: repo.name }); details.push({ name: repo.name, issueCount: issues.length }) } // Return summary return details; }
Explore the virtual filesystem to discover MCP servers and tools. The filesystem exposes all configured MCP servers as TypeScript modules under /servers/, the workspace under /workspace/, and builtin APIs under /builtin/.
Output schemas not documented for any tool. LLMs cannot plan downstream operations or extract return data reliably.
Error handling and recovery guidance completely absent. No description of what errors can occur (timeout, invalid path, permission denied, file too large) or how LLMs should respond.
Parameter descriptions lack specificity and constraint information. 'path' params need examples of valid formats and edge cases (absolute vs. relative, does trailing slash matter?). 'withDescriptions' needs clarity on what descriptions are returned and when to use it.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 27 | - | v1 |
Read tool definitions, workspace files, or cached data from the virtual filesystem. Returns file contents as a string.
Example values in descriptions (e.g., '/servers/github/listRepos.ts', '/', '/servers', '/servers/github') may be reused literally by LLMs instead of adapted to actual context.
execute_code tool accepts arbitrary TypeScript code without validation, timeout bounds, or sandbox escape guarantees documented. No description of resource limits, execution timeouts, or what happens if code hangs or crashes.
No tool provides pagination or result limits. list_directory may return very large directory trees without limit guidance. execute_code may return unbounded results, potentially exhausting context window.