agent-runtime-mcp
Click on "Install 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., "@agent-runtime-mcpshow me my active tmux channels and their latest output"
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.
agent-runtime-mcp
A generic MCP communication layer for already-existing interactive terminal Channels, with tmux as the first backend.
Product surface
The current MCP server exposes exactly:
list_channels
get_channel
read_channel
write_text
send_control
healthThe product owns the MCP capabilities and Channel semantics behind those tools.
It does not decide what a terminal represents.
A Channel may contain Codex, another Agent CLI, a shell, a REPL or any other interactive program.
Related MCP server: Terminal MCP Server
Boundary
Inside product:
MCP tool/schema contract
backend-neutral Channel model
existing-Channel discovery
bounded output read
bounded ordinary-text write
explicit ENTER / INTERRUPT / ESCAPE
backend/service health
structured Channel/backend errors
tmux scope enforcementOutside product:
Worker / Agent / Task semantics
workflow scheduling / review / recovery
worktree / branch / PR lifecycle
tmux session/pane lifecycle
process startup/restart
application completion interpretation
deployment / tunnel / proxy
TLS / DNS / firewall
workspace/client authorization policy
provider credentials / host administrationDeployment is intentionally separate: agent-runtime-mcp is responsible for MCP capability, not how an operator makes the MCP process reachable.
Current implementation
The server currently runs over stdio.
Requirements:
Node.js 20 or newer;
npm;
tmux available to the service account.
Install and verify:
npm ci
npm run typecheck
npm test
npm run test:integration
npm run test:discovery
npm run test:dogfoodtest:discovery is the official-client regression for public stdio health/discovery. test:dogfood drives the complete six-Tool public MCP flow against an externally prepared disposable tmux + bash --noprofile --norc endpoint, including marker observation, INTERRUPT, post-control reuse, external destruction and no-recreation failure proof.
Build and run:
npm run build
npm startPrepare tmux externally
The MCP never creates panes. Prepare terminal endpoints with native tmux or another upper layer, for example:
tmux -L agent-runtime new-session -d -s demo
TMUX_SOCKET_NAME=agent-runtime npm startOptional backend configuration:
TMUX_SOCKET_NAME
TMUX_SOCKET_PATH
TMUX_ALLOWED_SESSIONS
TMUX_TIMEOUT_MS
TMUX_MAX_CHANNELS
TMUX_READ_DEFAULT_LINES
TMUX_READ_MAX_LINES
TMUX_READ_MAX_BYTESSafe input contract
write_text transports bounded ordinary Unicode text as data.
LF and TAB are allowed;
other Unicode
Cccontrols are rejected;caller text never becomes shell command syntax or caller-controlled tmux key grammar;
each call has a hard 1 MiB UTF-8 maximum;
submit=trueadds one explicit Enter only after text delivery succeeds.
send_control accepts exactly:
ENTER
INTERRUPT
ESCAPEMutation success means mechanical terminal transport only, not application success. Mutations are non-idempotent and are not blindly retried after ambiguous timeout.
Health contract
health reports only backend/service mechanical health:
backend_kind
available
detail?Health does not mean a Channel exists or that a foreground application/Agent/Task is ready.
Example composition
An upper layer may do:
prepare endpoint externally
→ list_channels
→ get_channel
→ read_channel
→ write_text
→ send_control when explicitly needed
→ interpret application result outside MCPThat is the key architectural split:
upper layer = lifecycle + meaning + workflow control
Channel MCP = communication capability onlyDocumentation
Product contract:
docs/requirements.mddocs/channel-architecture.mddocs/channel-model.mddocs/mcp-contract.mddocs/backends/tmux.mddocs/security.mddocs/technology-stack.mddocs/mvp-plan.md
docs/deployment.md documents the non-product deployment boundary only.
Repository development process:
AGENTS.mddocs/tasks/
The repository workflow and deployment environment are both separate from the public MCP capability model.
Available Tools
6 toolsget_channelBRead-onlyIdempotent
Inspect mechanical metadata and capabilities for one terminal channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | Opaque channel identifier returned by list_channels. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that the tool is read-only, idempotent, and non-destructive. The description adds limited context by naming the inspected entity, but it does not disclose behaviors like not-found handling or the form of the returned capabilities.
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?
A single front-loaded sentence with no wasted words or repetition of schema/annotation data. It earns every word.
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 simple one-parameter tool with strong annotations, the description is nearly sufficient. However, without an output schema it could more clearly define what 'mechanical metadata and capabilities' includes and how this differs from read_channel.
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?
There is one parameter and the schema already documents it as an opaque channel identifier returned by list_channels, so schema coverage is 100%. The description adds no parameter detail, but none is needed beyond the schema.
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?
States a clear verb ('inspect') and a specific resource ('mechanical metadata and capabilities') for a single terminal channel, which distinguishes it from list_channels. It does not explicitly contrast with read_channel, so it stops just short of full clarity.
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 guidance on when to choose this tool over read_channel or list_channels, nor any explicit when-not-to-use conditions. The intended context must be inferred from the verb and resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
healthARead-onlyIdempotent
Report mechanical backend/service health independently of Channel inventory or application state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful scope context ('independently of Channel inventory or application state') but does not describe response format or potential error behavior, though for a zero-parameter health check this is a minor 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?
A single, front-loaded sentence that states exactly what the tool does and what it does not depend on. Every word contributes value; there is no redundancy or filler.
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?
This is a simple zero-parameter health-check tool with read-only, idempotent, non-destructive annotations. The description is sufficient for an agent to select and invoke it correctly; no additional context is required.
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?
There are zero parameters, so the input schema fully documents all inputs. The description adds no parameter-level detail, which is unnecessary here. Baseline 4 applies due to the absence 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 uses a specific verb ('Report') and resource ('mechanical backend/service health'), and explicitly distinguishes it from 'Channel inventory or application state'. This clearly separates it from the channel-focused sibling tools like list_channels and get_channel.
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?
It clearly indicates this tool is for backend/service health checks and not for channel inventory or application state concerns, which implies when it should be used. It doesn't name alternative tools explicitly or state when-not-to-use scenarios, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_channelsARead-onlyIdempotent
List existing terminal channels visible in the configured backend scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds one useful behavioral detail: the result is scoped to what is visible in the configured backend scope. However, it does not mention potential pagination, ordering, or how channels are defined, though the bar is lower given the annotations.
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, front-loaded sentence with no filler. Every word contributes meaning, and the main action plus scope are stated immediately.
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 zero-parameter, read-only listing tool with strong annotations, this description is nearly complete. The only minor gap is that 'configured backend scope' is somewhat vague, and there is no explicit statement of the output shape, though 'List' strongly implies a collection result. Overall, an agent can safely invoke this tool without missing critical information.
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 tool has zero parameters and the schema is an empty object, so schema description coverage is 100%. There are no parameters whose semantics need explanation; the baseline of 4 applies because the tool takes no inputs and the description's scope qualifier is sufficient.
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 uses a specific verb ('List') and resource ('existing terminal channels') with an explicit scope qualifier ('visible in the configured backend scope'). It clearly conveys a plural listing operation, which distinguishes it from the singular sibling tools get_channel and read_channel, and from the write-oriented write_text and send_control.
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 gives no guidance about when to use this tool versus alternatives. With siblings like get_channel and read_channel available, an agent is not told whether list_channels is the right choice for enumeration versus targeted retrieval, nor are any exclusions or conditions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_channelARead-onlyIdempotent
Read bounded recent terminal output from one channel without waiting for semantic completion.
| Name | Required | Description | Default |
|---|---|---|---|
| bytes | No | ||
| lines | No | ||
| channel_id | Yes | Opaque channel identifier returned by list_channels. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive, so the description does not need to restate safety. It adds useful behavioral detail beyond the annotations by noting that output is bounded, recent, and not gated on semantic completion. This gives the agent a clearer picture of the read semantics.
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?
A single, focused sentence that front-loads the action and resource while adding the most important behavioral qualifier. There is no filler or repetition of schema details.
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?
The tool is simple and annotations cover the safety profile, but there is no output schema and the optional bounded-output parameters are not explained. The description gives enough to select the tool but not quite enough to invoke it optimally without further inference.
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 only 33% because only channel_id is documented. The description says output is 'bounded' but does not explain how the bytes and lines parameters control that bound or when to prefer one over the other. With low schema coverage, the description should compensate but does not.
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 states a specific action ('read'), a specific resource ('recent terminal output from one channel'), and key constraints ('bounded', 'without waiting for semantic completion'). This distinguishes it from siblings like list_channels and get_channel, so an agent can understand what this tool does at a glance.
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 phrase 'without waiting for semantic completion' provides clear context for when to use this tool: when recent bounded output is needed immediately rather than waiting for a complete result. It does not explicitly name alternatives or exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_controlADestructive
Send one explicit reviewed terminal control to an existing channel.
| Name | Required | Description | Default |
|---|---|---|---|
| control | Yes | ||
| channel_id | Yes | Opaque channel identifier returned by list_channels. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and idempotentHint=false, so the agent knows this is a non-idempotent, potentially destructive action. The description adds the useful scoping that the control must be 'explicit reviewed,' but it does not explain side effects of ENTER, INTERRUPT, or ESCAPE, or what happens after the control is sent.
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 focused sentence of about ten words with no filler. It places the core action and object first, and every word contributes either to scope ('one explicit reviewed') or to target ('existing channel').
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?
With only two parameters and an output schema absent, the description plus schema is sufficient to understand the basic call shape. However, it does not describe the expected return value, failure modes, or behavioral consequences of each control, which an agent would need for confident invocation in a terminal-control context.
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 schema documents channel_id as coming from list_channels, and control has a clear enum. The description adds the semantic framing 'terminal control' and the 'reviewed' constraint, but it does not clarify what each enum value does or the practical difference between INTERRUPT and ESCAPE, leaving part of the burden on the agent.
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 states a specific verb ('Send'), a concrete resource ('terminal control'), and a target ('existing channel'). It is clearly distinct from the sibling write_text, which sends textual content rather than control signals, though it does not explicitly name that sibling.
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 phrase 'to an existing channel' implies a precondition and suggests this tool is for control actions rather than text or read operations. However, there is no explicit guidance about when to choose send_control over write_text or read_channel, and no mention that channels should be obtained via list_channels first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_textADestructive
Deliver bounded ordinary Unicode terminal text to one existing channel. LF/TAB are allowed; explicit controls use send_control.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Ordinary terminal text; maximum 1 MiB UTF-8, excluding non-LF/TAB control characters. | |
| submit | Yes | Append one explicit ENTER only after text transport succeeds. | |
| channel_id | Yes | Opaque channel identifier returned by list_channels. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish destructiveHint=true and non-idempotency, so the safety profile is covered. The description adds valuable context beyond annotations: the text is bounded, LF/TAB are the only allowed control characters, and the target must be an existing channel. This helps the agent predict behavior and constraints without contradicting any annotation.
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?
A single, two-clause sentence front-loads the core purpose and constraint, then immediately resolves the main ambiguity with send_control. Every word earns its place; no filler or redundancy.
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 three-parameter write tool with a destructive annotation, the description supplies the essential selection and invocation context: what can be sent, where it goes, and when to use the sibling tool. It doesn't explain return values or error behavior, but no output schema exists and the schema's parameter descriptions cover the required details.
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 coverage is 100%, and the schema already documents each parameter thoroughly (1 MiB limit, control-character exclusion, submit semantics, channel_id provenance). The description reinforces some of this ('bounded', 'LF/TAB allowed') but adds no new parameter-level meaning beyond what the schema provides, so a baseline 3 is appropriate.
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 names a specific verb ('Deliver'), a precise resource ('one existing channel'), and key constraints ('bounded ordinary Unicode terminal text'). It also explicitly distinguishes itself from the sibling send_control by reserving control sequences for that tool, so an agent can immediately tell them apart.
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?
It provides an explicit usage boundary: ordinary text with LF/TAB is for this tool, while explicit controls should go to send_control. It also notes the channel must already exist, which implies first using list_channels. It does not exhaustively state when not to use it versus read-oriented siblings, but the distinction is clear.
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. Dates show when Glama detected each change.
6 tool updates
v0.1.0- First observed
get_channel - First observed
health - First observed
list_channels - First observed
read_channel - First observed
send_control - First observed
write_text
TDQS
Each tool targets a clearly distinct concern: listing inventory, inspecting one channel, reading output, writing text, sending control signals, and checking health. There is no meaningful overlap between read, write, and control operations, and list/get are separated by scope. Even write_text and send_control are disambiguated by the explicit note that controls belong in send_control.
Most tools follow a clear verb_noun pattern: list_channels, get_channel, read_channel, write_text, send_control. The only deviation is 'health', which is a single noun rather than verb_noun, but it is still predictable and readable. Overall naming is consistent and easy to infer.
Six tools is well-scoped for a terminal channel runtime server. Each tool has a distinct operational role, and the count is neither bloated nor sparse. The set covers inventory, inspection, I/O, control, and health without unnecessary duplication.
The core terminal channel workflow is covered: list channels, inspect a channel, read output, write text, and send controls. Notable gaps include no explicit wait/semantic completion tool and no channel creation or termination, but these may be outside the server's stated backend scope. Overall the surface is functional with only minor potential dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Run commands and read/write files on your servers over Termalin's keyless tunnels (hosted MCP).
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Agent communication platform for agent to agent messaging via MCP. Messages, channels, skills.
Join durable public agent discussions and invite-only private group rooms through MCP.
161
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for tmux operations that provides comprehensive control over tmux sessions, windows, and panes.1-
- FlicenseAqualityDmaintenanceEnables AI agents to spawn, interact with, and orchestrate multiple concurrent terminal sessions via tmux.9-
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to launch and interact with terminal/TUI programs, providing tools to inspect and control live CLI/TUI sessions.121Apache 2.0
- AlicenseNot gradedqualityBmaintenanceProvides persistent interactive shell sessions via pseudo-terminals for MCP agents, enabling bidirectional communication, incremental reads, and stateful command execution across steps.14MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/liqiangcc/agent-runtime-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server