par5-mcp
par5-mcp is an MCP server for parallel batch processing across lists of items using shell commands and AI agents.
List Management:
Create (
create_list): Define a named list of items (file paths, URLs, identifiers, etc.)Create from shell output (
create_list_from_shell): Populate a list by running a shell command (e.g.,find,git ls-files) and parsing its newline-delimited outputGet (
get_list), Update (update_list), Delete (delete_list), List all (list_all_lists): Full CRUD and inspection of lists within a session
Parallel Execution:
Shell commands (
run_shell_across_list): Run a shell command for every item in a list in parallel (batches of 10), using$itemas a placeholder; stdout/stderr streamed to separate per-item filesAI agents (
run_agent_across_list): Spawn AI coding agents (Claude, Gemini, Codex, or OpenCode) for every item in parallel (batches of 10), using{{item}}in prompts; agents run autonomously with auto-permission flags and streamed output
Configuration: Customize batch size, agent arguments, and disable specific agents via environment variables.
Spawns Gemini coding agents in parallel to process lists of items, with each agent executing custom prompts that can include item-specific context for batch AI-powered code processing and analysis.
Spawns Codex coding agents in parallel to process lists of items, with each agent executing custom prompts that can include item-specific context for batch AI-powered code processing and analysis.
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., "@par5-mcprun shell command 'wc -l $item' across all files in list 'abc-123'"
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.
par5-mcp
An MCP (Model Context Protocol) server that runs shell commands and AI coding agents across lists of items in parallel. Use it to process files in batches, run linters across targets, or delegate work to multiple agents.
Features
List Management: Create, update, delete, and inspect lists of items such as file paths, URLs, and identifiers
Parallel Shell Execution: Run shell commands across all items in a list with batched parallelism
Multi-Agent Orchestration: Spawn Claude, Gemini, or Codex agents in parallel to process items
Streaming Output: Results stream to files in real-time for monitoring progress
Batched Processing: Commands and agents run in batches of 10 to avoid overwhelming the system
Related MCP server: Claude Parallel Tasks MCP Server
Installation
npm install par5-mcpOr install globally:
npm install -g par5-mcpUsage
As an MCP Server
Add to your MCP client configuration:
{
"mcpServers": {
"par5": {
"command": "npx",
"args": ["par5-mcp"]
}
}
}Or if installed globally:
{
"mcpServers": {
"par5": {
"command": "par5-mcp"
}
}
}Available Tools
List Management
create_list
Creates a named list of items for parallel processing.
Parameters:
items(string[]): Array of items to store in the list
Returns: A unique list ID to use with other tools
Example:
create_list(items: ["src/a.ts", "src/b.ts", "src/c.ts"])
// Returns: list_id = "abc-123-..."get_list
Retrieves the items in an existing list by its ID.
Parameters:
list_id(string): The list ID returned bycreate_list
update_list
Updates an existing list by replacing its items with a new array.
Parameters:
list_id(string): The list ID to updateitems(string[]): The new array of items
delete_list
Deletes an existing list by its ID.
Parameters:
list_id(string): The list ID to delete
list_all_lists
Lists all existing lists and their item counts.
Parameters: None
Parallel Execution
run_shell_across_list
Executes a shell command for each item in a list. Commands run in batches of 10 parallel processes.
Parameters:
list_id(string): The list ID to iterate overcommand(string): Shell command with$itemplaceholder
Variable Substitution:
Use
$itemin your command. It will be replaced with each list item and shell-escaped.
Example:
run_shell_across_list(
list_id: "abc-123",
command: "wc -l $item"
)This runs wc -l 'src/a.ts', wc -l 'src/b.ts', etc. in parallel.
Output:
Standard output and standard error are streamed to separate files per item
File paths are returned for you to read the results
run_agent_across_list
Spawns an AI coding agent for each item in a list. Agents run in batches of 10 with a 5-minute timeout per agent.
Parameters:
list_id(string): The list ID to iterate overagent(enum):"claude","gemini", or"codex"prompt(string): Prompt with{{item}}placeholder
Available Agents:
Agent | CLI | Auto-Accept Flag |
| Claude Code CLI |
|
| Google Gemini CLI |
|
| OpenAI Codex CLI |
|
Variable Substitution:
Use
{{item}}in your prompt - it will be replaced with each list item
Example:
run_agent_across_list(
list_id: "abc-123",
agent: "claude",
prompt: "Review {{item}} for security vulnerabilities and suggest fixes"
)Output:
Standard output and standard error are streamed to separate files per item
File paths are returned for you to read the agent outputs
Workflow Example
Here's a typical workflow for processing multiple files:
Create a list of files to process:
create_list(items: ["src/auth.ts", "src/api.ts", "src/utils.ts"])Run a shell command across all files:
run_shell_across_list( list_id: "<returned-id>", command: "cat $item | grep -n 'TODO'" )Or delegate to AI agents:
run_agent_across_list( list_id: "<returned-id>", agent: "claude", prompt: "Add comprehensive JSDoc comments to all exported functions in {{item}}" )Read the output files to check results
Clean up:
delete_list(list_id: "<returned-id>")
Configuration
The following environment variables can be used to configure par5-mcp:
Variable | Description | Default |
| Number of parallel processes per batch |
|
| Additional arguments passed to all agents | (none) |
| Additional arguments passed to Claude CLI | (none) |
| Additional arguments passed to Gemini CLI | (none) |
| Additional arguments passed to Codex CLI | (none) |
| Set to any value to disable the Claude agent | (none) |
| Set to any value to disable the Gemini agent | (none) |
| Set to any value to disable the Codex agent | (none) |
Example:
{
"mcpServers": {
"par5": {
"command": "npx",
"args": ["par5-mcp"],
"env": {
"PAR5_BATCH_SIZE": "20",
"PAR5_CLAUDE_ARGS": "--model claude-sonnet-4-20250514"
}
}
}
}Output Files
Results are written to temporary files in the system temp directory under par5-mcp-results/:
/tmp/par5-mcp-results/<run-id>/
├── auth.ts.stdout.txt
├── auth.ts.stderr.txt
├── api.ts.stdout.txt
├── api.ts.stderr.txt
└── ...File names are derived from the item value (sanitized for filesystem safety).
Contributing
Please start a Discussion before proposing a change. If we accept the proposal, a Mathematic maintainer or AI agent will implement it and open a pull request. We will link that pull request to the Discussion and credit the proposal's original author. GitHub restricts pull request creation to Mathematic maintainers, repository collaborators with write, maintain, or admin access, and authorized maintenance agents. See CONTRIBUTING.md for the full process.
Development
Building from Source
git clone https://github.com/mathematic-inc/par5-mcp.git
cd par5-mcp
mise install
mise exec -- pnpm install --frozen-lockfile
mise exec -- hk install
mise exec -- pnpm buildRunning Locally
mise exec -- pnpm startRequirements
Node.js 20+
For
run_agent_across_list:claudeagent requires Claude Code CLI installedgeminiagent requires Gemini CLI installedcodexagent requires Codex CLI installed
License
Apache-2.0
This project is free and open-source work by a 501(c)(3) non-profit. If you find it useful, please consider donating.
Available Tools
8 toolscreate_listA
Creates a named list of items for parallel processing. Use this tool when you need to perform the same operation across multiple files, URLs, or any collection of items.
WHEN TO USE:
Before running shell commands or AI agents across multiple items
When you have a collection of file paths, URLs, identifiers, or any strings to process in parallel
WORKFLOW:
Call create_list with your array of items
Use the returned list_id with run_shell_across_list or run_agent_across_list
The list persists for the duration of the session
EXAMPLE: To process files ["src/a.ts", "src/b.ts", "src/c.ts"], first create a list, then use run_shell_across_list or run_agent_across_list with the returned id.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of items to store in the list. Each item can be a file path, URL, identifier, or any string that will be substituted into commands or prompts. |
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 effectively describes key behaviors: the list persists for the session duration, items can be file paths, URLs, identifiers, or strings, and the workflow involves using the returned list_id with other tools. However, it doesn't mention potential errors, rate limits, or specific constraints beyond persistence.
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 well-structured with clear sections (purpose, usage, workflow, example) and front-loaded key information. It's appropriately sized, but the example section is somewhat detailed, which slightly reduces conciseness while adding clarity.
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, 100% schema coverage, no output schema, and moderate complexity, the description is mostly complete. It covers purpose, usage, workflow, and parameters well, but lacks details on error handling or output specifics (e.g., format of list_id), which would enhance completeness for a tool with no output schema.
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, so the baseline is 3. The description adds value by elaborating on the 'items' parameter semantics: it specifies that items can be 'file paths, URLs, identifiers, or any strings' and explains their purpose ('substituted into commands or prompts'), providing context beyond the schema's basic description.
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 tool's purpose: 'Creates a named list of items for parallel processing.' It specifies the verb ('creates'), resource ('named list of items'), and distinguishes from siblings by focusing on creation rather than deletion, retrieval, or usage of lists.
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 explicitly provides usage guidelines with a 'WHEN TO USE' section, listing specific scenarios like before running shell commands or AI agents across multiple items. It also references sibling tools (run_shell_across_list, run_agent_across_list) as alternatives for subsequent steps, clearly differentiating when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_list_from_shellA
Creates a list by running a shell command and parsing its newline-delimited output.
WHEN TO USE:
When you need to create a list from command output (e.g., find, ls, grep, git ls-files)
When the list of items to process is determined by a shell command
As an alternative to manually specifying items in create_list
EXAMPLES:
"find src -name '*.ts'" to get all TypeScript files
"git ls-files '*.tsx'" to get all tracked TSX files
"ls *.json" to get all JSON files in current directory
"grep -l 'TODO' src/**/*.ts" to get files containing TODO
WORKFLOW:
Call create_list_from_shell with your command
The command's stdout is split by newlines to create list items
Empty lines are filtered out
Use the returned list_id with run_shell_across_list or run_agent_across_list
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | Shell command to run. Its stdout will be split by newlines to create list items. Example: 'find src -name "*.ts"' or 'git ls-files' |
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 effectively describes the tool's behavior: it runs a shell command, splits stdout by newlines to create list items, filters out empty lines, and returns a list_id for use with other tools. However, it lacks details on error handling, timeouts, or security implications (e.g., command injection risks), which would be needed for a perfect score.
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 well-structured with clear sections (description, WHEN TO USE, EXAMPLES, WORKFLOW), each sentence adds value, and it avoids redundancy. It's appropriately sized for a tool with one parameter and no annotations, making it efficient and easy to parse.
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 moderate complexity (one parameter, no annotations, no output schema), the description is largely complete. It covers purpose, usage, examples, and workflow. However, it doesn't specify the return value format (e.g., what list_id is or how to use it), which is a minor gap since there's no output schema to compensate.
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 description coverage is 100%, so the baseline is 3. The description adds value by explaining that the command's stdout is split by newlines to create list items, which clarifies the parameter's purpose beyond the schema's example. However, it doesn't provide additional syntax or format details, keeping it slightly above baseline.
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 tool's purpose: 'Creates a list by running a shell command and parsing its newline-delimited output.' It specifies the verb ('creates'), resource ('list'), and mechanism ('shell command'), distinguishing it from sibling tools like create_list (manual specification) and run_shell_across_list (operates on existing lists).
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 'WHEN TO USE' section explicitly lists three scenarios for usage, including 'As an alternative to manually specifying items in create_list,' which directly compares it to a sibling tool. This provides clear guidance on when to choose this tool over alternatives, fulfilling the highest scoring criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_listA
Deletes an existing list by its ID.
WHEN TO USE:
To clean up lists that are no longer needed
To free up memory after processing is complete
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | The list ID returned by create_list. |
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 clearly indicates this is a destructive operation ('Deletes'), which is critical information. However, it lacks details on permissions required, whether deletion is reversible, error handling (e.g., what happens if the list doesn't exist), or confirmation prompts. The memory-freeing note adds some context but doesn't fully cover behavioral traits.
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 appropriately sized and front-loaded, with the core purpose stated first ('Deletes an existing list by its ID.'), followed by a structured 'WHEN TO USE' section. Every sentence earns its place by providing essential guidance without unnecessary details, making it highly efficient and easy to scan.
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 (a destructive operation with no annotations and no output schema), the description is fairly complete. It covers the purpose, usage guidelines, and implies behavioral traits (destructive). However, it lacks details on return values, error cases, or side effects, which would be beneficial for a deletion tool. The high schema coverage helps compensate, but some gaps remain.
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 the 'list_id' parameter well-documented as 'The list ID returned by create_list.' The description doesn't add any additional parameter semantics beyond what the schema provides, but with high schema coverage, the baseline is 3. The description's clarity about deletion purpose slightly enhances understanding, warranting a score of 4.
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 specific action ('Deletes') and resource ('an existing list by its ID'), making the purpose unambiguous. It distinguishes itself from siblings like 'create_list', 'get_list', and 'update_list' by focusing on deletion rather than creation, retrieval, or modification.
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 'WHEN TO USE' section explicitly provides guidance on when to use this tool ('To clean up lists that are no longer needed' and 'To free up memory after processing is complete'). This helps differentiate it from alternatives like 'update_list' for modifications or 'list_all_lists' for viewing, though it doesn't explicitly name those alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listA
Retrieves the items in an existing list by its ID.
WHEN TO USE:
To inspect the contents of a list before processing
To verify which items are in a list
To check if a list exists
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | The list ID returned by create_list. |
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 this is a retrieval operation ('Retrieves'), implying it's likely read-only, but doesn't explicitly confirm safety or mention potential errors (e.g., if list_id is invalid). It adds some context about checking existence, but lacks details on return format, pagination, or rate limits.
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 well-structured with a clear purpose statement followed by a bulleted 'WHEN TO USE' section. Every sentence earns its place by providing actionable guidance without redundancy. It's appropriately sized for a simple retrieval 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 (single parameter, no output schema, no annotations), the description is reasonably complete. It covers purpose, usage guidelines, and parameter context. However, without annotations or output schema, it could better address behavioral aspects like error handling or return format.
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%, with the schema fully documenting the single parameter list_id. The description adds minimal value beyond the schema, only implying that list_id comes from create_list. Since the schema does the heavy lifting, the baseline score of 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 clearly states the specific action ('Retrieves the items in an existing list') and resource ('by its ID'), distinguishing it from siblings like create_list, delete_list, and list_all_lists. It explicitly mentions retrieving items rather than metadata or performing operations on the list.
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 'WHEN TO USE' section provides explicit guidance with three bullet points: inspecting contents before processing, verifying items, and checking existence. This clearly indicates when to use this tool versus alternatives like list_all_lists (for listing lists) or run_agent_across_list (for processing items).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_listsA
Lists all existing lists and their item counts.
WHEN TO USE:
To see all available lists in the current session
To find a list ID you may have forgotten
To check how many lists exist
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes what the tool returns (lists with item counts) but doesn't disclose behavioral aspects like whether results are paginated, sorted, or filtered. The description doesn't contradict any annotations since none exist, but leaves operational details unspecified.
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 efficiently structured with a clear purpose statement followed by a bulleted 'WHEN TO USE' section. Every sentence earns its place by providing distinct value - first stating what the tool does, then providing concrete usage scenarios. No wasted words 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 zero-parameter read-only tool with no output schema, the description provides good coverage of purpose and usage scenarios. However, it doesn't describe the return format (e.g., structure of list objects, what fields are included beyond ID and item count) which would be helpful given the lack of output schema.
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 (schema coverage 100%), so no parameter documentation is needed. The description appropriately focuses on the tool's purpose and usage rather than parameter details, which aligns with the zero-parameter baseline expectation.
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 tool's purpose with specific verb ('Lists') and resource ('all existing lists and their item counts'). It distinguishes from siblings like 'get_list' (which retrieves a specific list) by emphasizing comprehensive listing of all lists with 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?
The 'WHEN TO USE' section provides explicit guidance with three concrete scenarios: seeing all available lists, finding forgotten list IDs, and checking list counts. This clearly communicates when this tool is appropriate versus alternatives like 'get_list' for specific list retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_agent_across_listA
Spawns an AI coding agent for each item in a previously created list. Agents run in batches of 10 parallel processes with automatic permission skipping enabled.
WHEN TO USE:
Performing complex code analysis, refactoring, or generation across multiple files
Tasks that require AI reasoning rather than simple shell commands
When you need to delegate work to multiple AI agents working in parallel
AVAILABLE AGENTS:
claude: Claude Code CLI (uses --dangerously-skip-permissions for autonomous operation)
gemini: Google Gemini CLI (uses --yolo for auto-accept)
codex: OpenAI Codex CLI (uses --dangerously-bypass-approvals-and-sandbox for autonomous operation)
opencode: OpenCode CLI (uses run command for non-interactive autonomous operation)
HOW IT WORKS:
Each item in the list is substituted into the prompt where {{item}} appears
Agents run in batches of 10 at a time to avoid overwhelming the system
Output streams directly to files as the agents work
This tool waits for all agents to complete before returning
AFTER COMPLETION:
Read the stdout files to check the results from each agent
Check stderr files if you encounter errors
Files are named based on the item (e.g., "myfile.ts.stdout.txt")
VARIABLE SUBSTITUTION:
Use {{item}} in your prompt - it will be replaced with each list item
Example: "Review {{item}} for bugs" becomes "Review src/file.ts for bugs" for item "src/file.ts"
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | Which AI agent to use: 'claude', 'gemini', 'codex', 'opencode'. All agents run with permission-skipping flags for autonomous operation. | |
| model | No | Optional model to use. Passed as --model to the agent CLI. Examples: 'claude-opus-4-6', 'claude-sonnet-4-6' for Claude; 'gemini-2.5-pro' for Gemini; 'o3' for Codex. | |
| prompt | Yes | The prompt to send to each agent. Use {{item}} as a placeholder - it will be replaced with the current item value. Example: 'Review {{item}} and suggest improvements' or 'Add error handling to {{item}}' | |
| list_id | Yes | The list ID returned by create_list. This identifies which list of items to iterate over. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: batching of 10, automatic permission skipping, agent-specific flags, streaming output to files, and blocking until all agents finish. It falls just short of explicitly warning about potential filesystem modifications from autonomous agents.
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 longer than average but well-organized with clear sections and front-loaded purpose. Some redundancy exists between HOW IT WORKS and VARIABLE SUBSTITUTION, but each section is otherwise purposeful.
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 complex tool with no output schema or annotations, the description covers the input lifecycle, concurrency behavior, output file naming, and post-completion steps. It does not describe failure handling or partial-failure behavior, but the provided details are sufficient for correct 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 coverage is 100%, so the baseline is 3, but the description adds meaningful context: how list_id connects to create_list, how {{item}} substitution works, and how agent choices map to CLI flags. This goes beyond the schema descriptions.
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 first sentence states a precise verb, resource, and scope: it spawns an AI coding agent for each item in a previously created list. It also differentiates itself from the shell-based sibling by emphasizing AI reasoning and parallel agents.
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?
A dedicated WHEN TO USE section gives concrete contexts: complex analysis, refactoring, generation, and tasks needing AI rather than simple shell commands. It does not include explicit when-not-to-use or name the sibling tool, but the contrast with shell commands provides clear routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_shell_across_listA
Executes a shell command for each item in a previously created list. Commands run in batches of 10 parallel processes, with stdout and stderr streamed to separate files.
WHEN TO USE:
Running the same shell command across multiple files (e.g., linting, formatting, compiling)
Batch processing with command-line tools
Any operation where you need to execute shell commands on a collection of items
HOW IT WORKS:
Each item in the list is substituted into the command where $item appears
Commands run in batches of 10 at a time to avoid overwhelming the system
Output streams directly to files as the commands execute
This tool waits for all commands to complete before returning
AFTER COMPLETION:
Read the stdout files to check results
Check stderr files if you encounter errors or unexpected output
Files are named based on the item (e.g., "myfile.ts.stdout.txt")
VARIABLE SUBSTITUTION:
Use $item in your command - it will be replaced with each list item (properly shell-escaped)
Example: "cat $item" becomes "cat 'src/file.ts'" for item "src/file.ts"
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | Shell command to execute for each item. Use $item as a placeholder - it will be replaced with the current item value (properly escaped). Example: 'wc -l $item' or 'cat $item | grep TODO' | |
| list_id | Yes | The list ID returned by create_list. This identifies which list of items to iterate over. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels by disclosing key behavioral traits: it runs commands in batches of 10 parallel processes, streams output to files, waits for completion, and handles variable substitution with proper escaping. It also explains post-execution steps like reading stdout/stderr files, adding valuable context beyond basic functionality.
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 well-structured with clear sections (e.g., WHEN TO USE, HOW IT WORKS) and front-loaded key information. While slightly verbose, each sentence earns its place by adding necessary details like batch size and file naming, making it efficient for understanding without waste.
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 (parallel execution, file output) and lack of annotations/output schema, the description is highly complete. It covers purpose, usage, behavior, parameters, and post-execution steps, providing all needed context for an AI agent to invoke it correctly without gaps.
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 baseline is 3. The description adds significant value by explaining variable substitution with $item, providing examples (e.g., 'cat $item'), and detailing how items are shell-escaped, which clarifies semantics beyond the schema's basic parameter descriptions.
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 tool's purpose with specific verbs ('executes a shell command for each item in a previously created list') and distinguishes it from siblings by specifying it operates on lists created by other tools (like create_list) and differs from run_agent_across_list. It explicitly mentions batch processing with parallel execution.
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 'WHEN TO USE' section provides explicit guidance on when to use this tool (e.g., running same command across multiple files, batch processing) and implies alternatives by referencing sibling tools like create_list for list creation. It clearly sets the context for usage with shell commands on collections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_listA
Updates an existing list by replacing its items with a new array.
WHEN TO USE:
To modify the contents of an existing list
To add or remove items from a list
To reorder items in a list
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | The new array of items to replace the existing list contents. | |
| list_id | Yes | The list ID returned by create_list. |
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 discloses that this is a mutation tool ('updates,' 'replacing'), which implies it modifies data. However, it lacks details on behavioral traits like permissions needed, whether changes are reversible, error handling, or rate limits. The description adds some value by clarifying the replacement behavior but doesn't fully compensate for the lack of 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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by a bulleted 'WHEN TO USE' section. Each sentence earns its place by providing clear guidance. However, the bullet points could be slightly more concise, and there's minor redundancy (e.g., 'modify the contents' overlaps with 'add or remove items'), preventing a perfect 5.
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 (a mutation tool with no annotations and no output schema), the description is somewhat complete but has gaps. It explains the purpose and usage well, but lacks details on behavioral aspects like side effects, return values, or error conditions. With no output schema, it doesn't describe what the tool returns, which is a significant omission for a mutation operation.
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%, with clear descriptions for both parameters: 'list_id' as 'The list ID returned by create_list' and 'items' as 'The new array of items to replace the existing list contents.' The description doesn't add meaning beyond this, as it only mentions 'replacing its items with a new array,' which aligns with the schema. With high coverage, the baseline is 3, and the description doesn't enhance it further.
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 tool's purpose: 'Updates an existing list by replacing its items with a new array.' This specifies the verb ('updates'), resource ('existing list'), and scope ('replacing its items with a new array'). However, it doesn't explicitly differentiate from siblings like 'create_list' or 'delete_list' beyond the 'existing list' qualifier, which is why it doesn't reach 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 'WHEN TO USE' section provides clear context: 'To modify the contents of an existing list,' 'To add or remove items from a list,' and 'To reorder items in a list.' This gives explicit guidance on when to use this tool. However, it doesn't mention when not to use it or name alternatives (e.g., using 'create_list' for new lists instead), so it falls 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v0.2.7- Changed
run_agent_across_list1 field changed- added
Input schema / properties / modelAdded value: +{ + "description": "Optional model to use. Passed as --model to the agent CLI. Examples: 'claude-opus-4-6', 'claude-sonnet-4-6' for Claude; 'gemini-2.5-pro' for Gemini; 'o3' for Codex.", + "type": "string" +}
1 tool update
v1.0.0- Changed
run_agent_across_list2 fields changed- changed
Input schema / properties / agent / descriptionPrevious value: -"Which AI agent to use: 'claude', 'gemini', 'codex'. All agents run with permission-skipping flags for autonomous operation."New value: +"Which AI agent to use: 'claude', 'gemini', 'codex', 'opencode'. All agents run with permission-skipping flags for autonomous operation." - changed
Input schema / properties / agent / enumPrevious value: -[ - "claude", - "gemini", - "codex" -]New value: +[ + "claude", + "gemini", + "codex", + "opencode" +]
8 tool updates
- First observed
create_list - First observed
create_list_from_shell - First observed
delete_list - First observed
get_list - First observed
list_all_lists - First observed
run_agent_across_list - First observed
run_shell_across_list - First observed
update_list
TDQS
Each tool has a clearly distinct purpose with no ambiguity. The tools cover list creation (from manual input or shell output), list management (get, update, delete, list all), and parallel execution (shell or AI agent). The two execution tools are clearly differentiated by their target (shell commands vs AI agents).
All tools follow a consistent verb_noun pattern with perfect regularity. The naming convention is uniformly descriptive: create_list, create_list_from_shell, delete_list, get_list, list_all_lists, run_agent_across_list, run_shell_across_list, update_list. No mixing of conventions or styles.
With 8 tools, this server is well-scoped for its parallel processing domain. Each tool earns its place, covering the complete lifecycle of list management and parallel execution. The count is neither too sparse nor bloated, providing comprehensive functionality without redundancy.
The tool surface provides complete CRUD/lifecycle coverage for parallel processing workflows. It covers list creation (manual and shell-based), retrieval, updating, deletion, listing all lists, and both shell and AI agent execution across lists. No obvious gaps exist for the stated purpose of batch processing collections.
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
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Shared control plane for AI coding agents — tasks, memory, decisions, file locks. 12 tools.
Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.
Build and supervise fleets of agents from Claude Code, Codex or Cursor. Connects over OAuth.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceTransform your local machine into a powerful code command center. Automate file handling, run terminal commands, and leverage AI to enhance your development workflows—all securely and instantly, without cloud latency.14MIT
- FlicenseBqualityDmaintenanceEnables running multiple Claude prompts simultaneously in parallel with support for file contexts and output redirection to individual files.1-
- AlicenseNot gradedqualityFmaintenanceEnables LLMs to create and manage persistent, interactive shell sessions with full terminal emulation and PTY support. It allows for sequential command execution and supports interactive programs like vim or htop through specialized streaming and snapshot output modes.4MIT
- AlicenseCqualityBmaintenanceRoutes coding tasks across multiple AI CLIs (Copilot, Claude Code, Gemini, etc.) with cost-aware tier routing and parallel wave orchestration.552Apache 2.0
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/mathematic-inc/par5-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server