Command Palette

Search for a command to run...

UnylyUnyly
Browse all

Orcs

FreeNot checked

MCP (Model Context Protocol) client integration for ORCS

GitHubEmbed

About

MCP (Model Context Protocol) client integration for ORCS

README

CI crates.io docs.rs License: MIT OR Apache-2.0 MSRV: 1.80.0 Rust

Lua-extensible Agentic Shell for building AI-powered development tools.

ORCS (Orchestrated Runtime Component System) provides a component-based architecture where every behavior is implemented as a Lua script, capability-gated, and sandboxed.

Part of the ORCS family — a suite of multi-agent AI tools built around orchestrated reasoning and collaboration. See also ORCS Desktop for the GUI workspace application.

Prerequisites

  • Rust 1.80.0 or later

Features

  • Lua-first extensibility -- All components (agents, skills, tools) are Lua scripts
  • Capability-gated APIs -- LLM, HTTP, exec, file I/O each require explicit capability grants
  • Sandbox isolation -- Path traversal prevention, Lua stdlib restrictions, input sanitization
  • Multi-provider LLM -- Ollama, OpenAI, Anthropic via config.toml
  • ActionIntent system -- Unified tool dispatch with IntentRegistry, LLM tool_use auto-resolution, and dynamic intent registration
  • Skill recommendation -- LLM-based or keyword-based skill matching with automatic tool registration
  • Session persistence -- Pause/resume with component state snapshot
  • Hook system -- FQL-based lifecycle hooks for pre/post processing
  • Human-in-the-loop -- Approval workflows for destructive operations

Install

cargo install orcs-cli

Or from source:

cargo build --release
# Binary at target/release/orcs

Quick Start

Run with default builtins

orcs

Run with verbose output

orcs --verbose

Run in sandbox mode (isolated environment)

orcs --sandbox

Resume a previous session

orcs --resume <SESSION_ID>

Create a Lua component

-- ~/.orcs/components/hello.lua
return {
    id = "hello",
    namespace = "custom",
    subscriptions = {"Hello"},

    init = function(cfg)
        orcs.log("info", "Hello component initialized")
    end,

    on_request = function(request)
        if request.operation == "greet" then
            local name = request.payload or "world"
            return { success = true, data = "Hello, " .. name .. "!" }
        end
        return { success = false, error = "unknown operation" }
    end,

    on_signal = function(sig)
        return "Handled"
    end,

    shutdown = function()
        orcs.log("info", "Goodbye")
    end,
}

Add it to config.toml:

[components]
load = ["agent_mgr", "skill_manager", "hello"]

CLI

orcs [OPTIONS] [COMMAND]...
Flag Description
-d, --debug Enable debug logging
-v, --verbose Verbose output
-C, --project <PATH> Project root directory
--resume <ID> Resume an existing session
--profile <NAME> Profile name (ORCS_PROFILE)
--experimental Enable experimental components (ORCS_EXPERIMENTAL)
--sandbox [DIR] Sandbox mode (optional dir, defaults to tempdir)
--builtins-dir <PATH> Override builtins directory (ORCS_BUILTINS_DIR)
--install-builtins Install/update builtin components and exit

Lua API

File I/O (Sandbox-gated)

Function Returns Description
orcs.read(path) {ok, content, size} Read file contents
orcs.write(path, content) {ok, bytes_written} Write file (atomic)
orcs.grep(pattern, path) {ok, matches[], count} Regex search
orcs.glob(pattern, dir?) {ok, files[], count} Glob pattern search
orcs.mkdir(path) {ok} Create directory with parents
orcs.remove(path) {ok} Remove file or directory
orcs.mv(src, dst) {ok} Move / rename
orcs.scan_dir(config) table[] Directory scan with include/exclude
orcs.parse_frontmatter(path) {frontmatter, body, format} Parse file frontmatter

Execution (Capability::EXECUTE)

Function Returns Description
orcs.exec(cmd) {ok, stdout, stderr, code} Shell command execution
orcs.exec_argv(program, args, opts?) {ok, stdout, stderr, code} Direct execution (no shell)

LLM (Capability::LLM)

Function Returns Description
orcs.llm(prompt, opts?) {ok, content, model, session_id, stop_reason, intents} LLM chat completion
orcs.llm_ping(opts?) {ok, provider, base_url, latency_ms} Provider health check
orcs.llm_dump_sessions() string Export session history as JSON
orcs.llm_load_sessions(json) {ok, count} Restore session history from JSON

LLM opts support tools (default true), resolve (default false), and max_tool_turns (default 10) for automatic tool_use dispatch.

Intent Dispatch

Function Returns Description
orcs.dispatch(name, args) table Unified intent dispatcher (8 builtins + dynamic)
orcs.intent_defs() table[] Intent definitions in JSON Schema format
orcs.register_intent(def) {ok, error} Register a Component-backed intent at runtime
orcs.tool_schemas() table[] Legacy tool schema format (backward compat)
orcs.tool_descriptions() string Formatted tool descriptions for prompts

HTTP (Capability::HTTP)

Function Returns Description
orcs.http(method, url, opts?) {ok, status, headers, body} HTTP request

Component Communication

Function Returns Description
orcs.request(target, op, payload) table Component-to-component RPC
orcs.request_batch(requests) table[] Parallel RPC batch
orcs.output(msg) nil Emit output event
orcs.output_with_level(msg, level) nil Emit leveled output event
orcs.emit_event(category, op, payload) nil Broadcast extension event
orcs.board_recent(n) table[] Query shared board

Child Management

Function Returns Description
orcs.spawn_child(config) {ok, id} Spawn child entity
orcs.send_to_child(id, msg) {ok, result} Send message to child
orcs.send_to_children_batch(ids, inputs) table[] Parallel batch send
orcs.spawn_runner(config) {ok, fqn, channel_id} Spawn a ChannelRunner
orcs.child_count() number Current child count
orcs.max_children() number Max allowed children

Serialization & Utilities

Function Returns Description
orcs.json_parse(str) value Parse JSON string
orcs.json_encode(value) string Encode to JSON
orcs.toml_parse(str) value Parse TOML string
orcs.toml_encode(value) string Encode to TOML
orcs.sanitize_arg(s) {ok, value, violations} Command argument validation
orcs.sanitize_path(s) {ok, value, violations} Path validation
orcs.sanitize_strict(s) {ok, value, violations} Strict validation (all rules)
orcs.log(level, msg) nil Structured logging
orcs.pwd string Sandbox root path
orcs.git_info() {ok, branch, commit_short, dirty} Git repository info
orcs.load_lua(content, name?) value Evaluate Lua in sandbox
orcs.check_command(cmd) {status, reason?} Check command permission
orcs.grant_command(pattern) nil Grant command pattern
orcs.request_approval(op, desc) approval_id HIL approval request

Configuration

Create config.toml in your project root (or ~/.orcs/config.toml for global):

[components]
load = ["agent_mgr", "skill_manager", "profile_manager", "foundation_manager", "console_metrics", "shell", "tool"]

[components.settings.agent_mgr]
llm_provider = "ollama"
llm_model = "llama3.2:latest"
llm_base_url = "http://localhost:11434"
# llm_api_key = ""         # for openai/anthropic
prompt_placement = "both"   # "top" | "both" | "bottom"

[components.settings.skill_manager]
recommend_skill = true
# recommend_llm_provider = "ollama"
# recommend_llm_model = "llama3.2:latest"

[hil]
auto_approve = false
timeout_ms = 30000

[ui]
verbose = false
color = true

[[hooks.hooks]]
id = "audit"
fql = "builtin::*"
point = "request.pre_dispatch"
script = "hooks/audit.lua"

Builtin Components

Component Description
agent_mgr Agent manager with LLM worker spawning and skill intent registration
skill_manager Skill catalog, recommendation, and execution
profile_manager User profile and preferences
foundation_manager Foundation/system prompt management
console_metrics Console output metrics
shell Interactive shell commands
tool Tool execution bridge
life_game Conway's Game of Life (experimental, --experimental)

Architecture

Layer 4: Frontend
  orcs-cli --- main.rs, Args, CliConfigResolver, --sandbox

Layer 3: Application
  orcs-app --- OrcsApp, OrcsAppBuilder, builtins expansion

Layer 2: Runtime (Internal)
  orcs-runtime --- Engine, Channel, World, Config, Session, Sandbox, IO

Layer 1.5: Hooks
  orcs-hook --- HookDef, HooksConfig, FQL-based lifecycle hooks

Layer 1: Plugin SDK
  orcs-component --- Component, Child, Agent, Skill traits
  orcs-event --- Signal, Request, Response
  orcs-types --- ComponentId, ActionIntent, IntentDef, IntentRegistry
  orcs-auth --- Capability, Permission, SandboxPolicy

Plugin Implementation:
  orcs-lua --- LuaComponent, LuaChild, orcs.* API, IntentRegistry, ScriptLoader

Dev Tools:
  orcs-lint --- Architecture lint (OL002: no unwrap, layer dependency checks)

Documentation

API documentation is generated from source via rustdoc. Each crate has module-level documentation with architecture diagrams, usage examples, and security notes.

cargo doc --workspace --no-deps --open

Contributing

Bug reports, feature requests, and questions are welcome via GitHub Issues.

License

Licensed under either of

at your option.

from github.com/ynishi/orcs-cli

Installing Orcs

This server has no published package — it is built from source. Open the repository and follow its README.

▸ github.com/ynishi/orcs-cli

FAQ

Is Orcs MCP free?

Yes, Orcs MCP is free — one-click install via Unyly at no cost.

Does Orcs need an API key?

No, Orcs runs without API keys or environment variables.

Is Orcs hosted or self-hosted?

Self-hosted: the server runs locally on your machine via the install command above.

How do I install Orcs in Claude Desktop, Claude Code or Cursor?

Open Orcs on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.

Related MCPs

Compare Orcs with

Not sure what to pick?

Find your stack in 60 seconds

Author?

Embed badge for your README

Browse similar

All development MCPs