mcp-chaining
Research-to-implement pipeline chaining 5 MCP tools with graceful degradation
pinned to #d07ff4bupdated last month
Ask your AI client: “install skills/mcp-chaining”.
Requires the metahub MCP server installed in your client. Set up MCP.
mh install skills/mcp-chainingmetahub onboarded this repo on the author's behalf.
If you own github.com/parcadei/Continuous-Claude-v3 on GitHub, claim the listing to take over publishing. Your claim preserves the existing eval history and badges; only the curator label is replaced with verified-publisher on your next publish.
Stars
3,883
Last commit
last month
Latest release
published
- #agents
- #claude-code
- #claude-code-cli
- #claude-code-hooks
- #claude-code-mcp
- #claude-code-skills
- #claude-code-subagents
- #claude-skills
- #mcp
About this skill
Pulled from SKILL.md at publish time.
A research-to-implement pipeline that chains 5 MCP tools for end-to-end workflows.
Allowed tools
- [Bash
- Read]
Automated checks the publisher passed at publish time — structure, docs, safety, and whether the artifact behaves as claimed.d07ff4b· last month
Behavioral checks ran but aren't published for this artifact; the static checks above ran at publish time.
Documentation
7 passed2 warningsDescription qualitywarn
9 words · 77 chars — skills use the description as their trigger; aim higher
Aim for 15+ words and include trigger phrases like “use this skill when …”.
Homepage or repository declaredwarn
No homepage or repository declared.
Add a "homepage" or "repository" field to SKILL.md.
README is present and substantial
45,577 chars · 22 sections · 38 code blocks
Tags / topics declared
9 total — agents, claude-code, claude-code-cli, claude-code-hooks, claude-code-mcp, claude-code-skills (+3)
README has usage / example sections
found: Quick Start · Installation · Installation (+1)
Homepage / docs URL declared
no homepage declared (registry will use the repo URL) — info-only, not blocking
Description is substantive
Description is 9 words.
Documentation present and substantive
Documentation present (SKILL.md, 575 words).
Documentation shows usage
Documentation includes 10 code examples.
Release history
1- releasecurrentd07ff4bwarnlast month
Contents
A research-to-implement pipeline that chains 5 MCP tools for end-to-end workflows.
When to Use
- Building multi-tool MCP pipelines
- Understanding how to chain MCP calls with graceful degradation
- Debugging MCP environment variable issues
- Learning the tool naming conventions for different MCP servers
What We Built
A pipeline that chains these tools:
| Step | Server | Tool ID | Purpose |
|---|---|---|---|
| 1 | nia | nia__search | Search library documentation |
| 2 | ast-grep | ast-grep__find_code | Find AST code patterns |
| 3 | morph | morph__warpgrep_codebase_search | Fast codebase search |
| 4 | qlty | qlty__qlty_check | Code quality validation |
| 5 | git | git__git_status | Git operations |
Key Files
scripts/research_implement_pipeline.py- Main pipeline implementationscripts/test_research_pipeline.py- Test harness with isolated sandboxworkspace/pipeline-test/sample_code.py- Test sample code
Usage Examples
# Dry-run pipeline (preview plan without changes)
uv run python -m runtime.harness scripts/research_implement_pipeline.py \
--topic "async error handling python" \
--target-dir "./workspace/pipeline-test" \
--dry-run --verbose
# Run tests
uv run python -m runtime.harness scripts/test_research_pipeline.py --test all
# View the pipeline script
cat scripts/research_implement_pipeline.py
Critical Fix: Environment Variables
The MCP SDK's get_default_environment() only includes basic vars (PATH, HOME, etc.), NOT os.environ. We fixed src/runtime/mcp_client.py to pass full environment:
# In _connect_stdio method:
full_env = {**os.environ, **(resolved_env or {})}
This ensures API keys from ~/.claude/.env reach subprocesses.
Graceful Degradation Pattern
Each tool is optional. If unavailable (disabled, no API key, etc.), the pipeline continues:
async def check_tool_available(tool_id: str) -> bool:
"""Check if an MCP tool is available."""
server_name = tool_id.split("__")[0]
server_config = manager._config.get_server(server_name)
if not server_config or server_config.disabled:
return False
return True
# In step function:
if not await check_tool_available("nia__search"):
return StepResult(status=StepStatus.SKIPPED, message="Nia not available")
Tool Name Reference
nia (Documentation Search)
nia__search - Universal documentation search
nia__nia_research - Research with sources
nia__nia_grep - Grep-style doc search
nia__nia_explore - Explore package structure
ast-grep (Structural Code Search)
ast-grep__find_code - Find code by AST pattern
ast-grep__find_code_by_rule - Find by YAML rule
ast-grep__scan_code - Scan with multiple patterns
morph (Fast Text Search + Edit)
morph__warpgrep_codebase_search - 20x faster grep
morph__edit_file - Smart file editing
qlty (Code Quality)
qlty__qlty_check - Run quality checks
qlty__qlty_fmt - Auto-format code
qlty__qlty_metrics - Get code metrics
qlty__smells - Detect code smells
git (Version Control)
git__git_status - Get repo status
git__git_diff - Show differences
git__git_log - View commit history
git__git_add - Stage files
Pipeline Architecture
+----------------+
| CLI Args |
| (topic, dir) |
+-------+--------+
|
+-------v--------+
| PipelineContext|
| (shared state) |
+-------+--------+
|
+-------+-------+-------+-------+-------+
| | | | | |
+---v---+---v---+---v---+---v---+---v---+
| nia |ast-grp| morph | qlty | git |
|search |pattern|search |check |status |
+---+---+---+---+---+---+---+---+---+---+
| | | | |
+-------v-------v-------v-------+
|
+-------v--------+
| StepResult[] |
| (aggregated) |
+----------------+
Error Handling
The pipeline captures errors without failing the entire run:
try:
result = await call_mcp_tool("nia__search", {"query": topic})
return StepResult(status=StepStatus.SUCCESS, data=result)
except Exception as e:
ctx.errors.append(f"nia: {e}")
return StepResult(status=StepStatus.FAILED, error=str(e))
Creating Your Own Pipeline
- Copy the pattern from
scripts/research_implement_pipeline.py - Define your steps as async functions
- Use
check_tool_available()for graceful degradation - Chain results through
PipelineContext - Aggregate with
print_summary()
Reviews
No reviews yet. Be the first.
Related
Verification Before Completion
Evidence before assertions, always
Writing Plans
Turn specs into phased implementation plans
Test-Driven Development
Red → green → refactor discipline for any feature or bugfix
mh install skills/mcp-chaining