MCP server returned: parrot-calc-mcp · version 1.0.0.
MCP tools returned: CalculatorTool. Tool listing does not establish authenticated tool-call success.
What the agent did
Install ai-parrot from the pinned commit 5f59e1b7b9018f0075e1e7c720ac57d2aa1f3fe0 and run README CLI operations: parrot mcp --config server.yaml (MCP stdio tool call), parrot autonomous create --agent my_agent.py
cd <guest-path> && pwd && ls -la && id -u && python3 --version && (git -C . rev-parse HEAD 2>&1 | head -1) && echo "CDP=$CDP_URL" && ls /inputs 2>&1 | head
cd <guest-path> && wc -c README.md && head -c 6000 README.md
cd <guest-path> && grep -n "^## \|^### " README.md | head -80
cd <guest-path> && sed -n '/^## Installation/,/^## Running as a Server/p' README.md | head -c 7500
cd <guest-path> && sed -n '91,130p' README.md
cd <guest-path> && sed -n '234,302p' README.md
cd <guest-path> && grep -n -i "python_requires\|requires-python\|python 3\.\|Python >=\|python>=" README.md packages/ai-parrot/pyproject.toml pyproject.toml | head; sed -n '584,603p' README.md
mkdir -p <guest-path> && cd <guest-path> && (python3 -m venv <guest-path> 2>&1 || (sudo -n apt-get -o DPkg::Lock::Timeout=300 install -y python3.12-venv ><guest-path> 2>&1; python3 -m venv <guest-path>)) && <guest-path> --version && <guest-path> --version
cd <guest-path> && timeout 3000 <guest-path> install -q ai-parrot > <guest-path> 2>&1; echo "exit=$?"; tail -c 2000 <guest-path>
cd <guest-path> && sed -n '635,706p' README.md
cd <guest-path> && timeout 3000 <guest-path> install -q . > <guest-path> 2>&1; echo "exit=$?"; tail -c 1500 <guest-path>; ls <guest-path> | grep -i parrot
cd <guest-path> && sed -n '302,404p' README.md
cd <guest-path> && sed -n '545,562p' README.md; <guest-path> --help 2>&1 | head -40
cd <guest-path> && ls env && <guest-path> --help 2>&1 | tail -30
cd <guest-path> && ls -la env; sed -n '60,95p' <guest-path>
cd /tmp && grep -n "def project_root" -A25 <guest-path> | head -45
mkdir -p <guest-path> && cd <guest-path> && export SITE_ROOT=<guest-path> && <guest-path> conf init --help 2>&1 | tail -20; echo ---; <guest-path> conf init 2>&1 | tail -15; echo "exit=$?"; find <guest-path> -maxdepth 3 | head -30
ls <guest-path> | grep -i kardex; <guest-path> show kardex navconfig 2>&1 | grep -E "Name|Version|Requires"; grep -rn "kardex" <guest-path> <guest-path> | head
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot conf init 2>&1 | tail -15; echo "exit=${PIPESTATUS[0]}"; find <guest-path> -maxdepth 3 | head -40
cd <guest-path> && grep -rn "navconfig" packages/ai-parrot/pyproject.toml pyproject.toml | head; grep -rn "kardex', 'create'\|\"kardex\", \"create\"\|'kardex'" packages/ai-parrot/parrot --include=*.py | head -5
cd <guest-path> && grep -n -A2 '^name = "navconfig"' uv.lock | head; grep -n -A2 '^name = "kardex"' uv.lock | head -4
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && kardex env create 2>&1 | tail -15; echo "exit=${PIPESTATUS[0]}"; find <guest-path> -maxdepth 3 | head -40
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot --help 2>&1 | tail -30; echo ---; parrot mcp --help 2>&1 | tail -30
cd <guest-path> && find packages -path "*parrot/mcp*" -name "*.py" | grep -i "cli\|server" | head -20; ls packages/ai-parrot/src/parrot/mcp 2>/dev/null | head -30; grep -n "parrot.mcp.cli\|mcp.cli" -r packages/ai-parrot/src --include=*.py | head -5
cd <guest-path> && grep -n -A12 "\[project.scripts\]" packages/ai-parrot/pyproject.toml; grep -rn "parrot.mcp.cli\|mcp.cli" packages/*/pyproject.toml packages/*/src --include=*.py --include=*.toml | head
cd <guest-path> && ls cli; grep -n "add_command\<email>\|def mcp\|\"mcp\"" cli/*.py | head -40; grep -n "def \|argparse\|click" mcp/local_cli.py | head -20
cd <guest-path> && sed -n '95,135p' cli/__init__.py; sed -n '136,240p' mcp/local_cli.py | head -110
cd <guest-path> && ls -la .parrot; cat .parrot/mcp-toolkits.yaml 2>/dev/null | head -60
cd <guest-path> && sed -n '562,584p' README.md; sed -n '456,504p' README.md | head -60
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot toolkits --help 2>&1 | tail -20; echo ---; cd <guest-path> && parrot mcp-local --list 2>&1 | tail -5; echo "rc=${PIPESTATUS[0]}"
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot toolkits list 2>&1 | grep -v "DEBUG\|INFO" | tail -40; echo "rc=${PIPESTATUS[0]}"; parrot toolkits install --help 2>&1 | tail -15
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot toolkits install memory --host claude --yes 2>&1 | grep -v "DEBUG" | tail -20; echo "rc=${PIPESTATUS[0]}"; cat .parrot/mcp-toolkits.yaml 2>/dev/null
cd <guest-path> && grep -n "class WorkingMemoryToolkit\| async def \| def " working_memory/tool.py 2>/dev/null | head -40 || grep -n " async def " working_memory.py | head -30; ls | grep -i memory
cd <guest-path> && sed -n '357,375p' tool.py; sed -n '631,652p' tool.py
cd <guest-path> && sed -n '936,990p' tool.py
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | timeout 60 parrot mcp-local memory 2><guest-path> > <guest-path>; echo "rc=$?"; python3 -c "
import json,sys
for line in open('<guest-path>'):
try: o=json.loads(line)
except Exception: continue
if o.get('id')==2:
for t in o['result']['tools']: print(t['name'], json.dumps(t.get('inputSchema',{}).get('properties',{}))[:200], t.get('inputSchema',{}).get('required'))
" ; tail -3 <guest-path>
cd <guest-path> && timeout 3000 <guest-path> install -q . > <guest-path> 2>&1; echo "exit=$?"; tail -c 1500 <guest-path>
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | timeout 90 parrot mcp-local memory 2><guest-path> > <guest-path>; echo "rc=$?"; python3 -I -c "
import json
for line in open('<guest-path>'):
try: o=json.loads(line)
except Exception: continue
if o.get('id')==2:
for t in o['result']['tools']: print(t['name'], list(t.get('inputSchema',{}).get('properties',{}).keys()), t.get('inputSchema',{}).get('required'))
"; tail -c 600 <guest-path>
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"wm_store_result","arguments":{"key":"probe_note","data":"parrot-probe-7341"}}}' '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"wm_get_result","arguments":{"key":"probe_note"}}}' | timeout 90 parrot mcp-local memory 2><guest-path> | python3 -I -c "
import sys,json
for l in sys.stdin:
try: o=json.loads(l)
except Exception: continue
if o.get('id') in (2,3): print(o['id'], json.dumps(o)[:900])
"
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot mcp --config server.yaml ><guest-path> 2>&1; echo "mcp_rc=$?"; tail -1 <guest-path>; parrot conf init ><guest-path> 2>&1; echo "conf_rc=$?"; grep -n "invalid choice" <guest-path> | head -2; cd <guest-path> && grep -rln "\-\-once\|\-\-now\|run_once" README.md packages/ai-parrot-server/src/parrot/scheduler 2>/dev/null | head; ls packages/ai-parrot-server/src/parrot/scheduler 2>/dev/null | head -20
cd <guest-path> && grep -rn "^def schedule\|^class ScheduleType\|def schedule(" packages/*/src/parrot --include=*.py | head -5; grep -n " async def \| def " packages/ai-parrot-server/src/parrot/scheduler/manager.py | head -40
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot autonomous --help 2>&1 | grep -v DEBUG | tail -15; parrot autonomous create --help 2>&1 | grep -v DEBUG | tail -15
cd <guest-path> && ls packages/*/src/parrot/autonomous/ packages/*/src/parrot/mcp/cli.py 2>&1 | head; ls packages/ai-parrot/src/parrot/autonomous 2>&1 | head -3
cd <guest-path> && timeout 3000 <guest-path> install -q . > <guest-path> 2>&1; echo "exit=$?"; tail -c 1200 <guest-path>; cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot mcp --help 2>&1 | grep -v DEBUG | tail -12; echo ---; parrot autonomous create --help 2>&1 | grep -v DEBUG | tail -12
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot mcp serve --help 2>&1 | grep -v DEBUG | tail -25; echo ---; cd <guest-path> && find packages/ai-parrot-server/src/parrot/mcp -name "*.yaml*" | head; grep -rln "server.yaml\|mcp.*yaml" packages/ai-parrot-server/src/parrot/mcp/*.py | head -5
cd <guest-path> && grep -n "yaml\|\.get(\"\|\[\"" cli.py | head -60
cd <guest-path> && sed -n '106,135p' cli.py
cd <guest-path> && printf '%s\n' 'name: parrot-memory-mcp' 'description: Parrot working memory over MCP' 'transport: stdio' 'tools:' ' - class: WorkingMemoryToolkit' ' module: parrot.tools.working_memory.tool' > server.yaml && cat server.yaml && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"store_result","arguments":{"key":"probe_note","data":"parrot-probe-7341"}}}' | timeout 120 parrot mcp --config server.yaml 2><guest-path> | head -c 1500; echo; echo "rc=${PIPESTATUS[1]}"; grep -v DEBUG <guest-path> | tail -5
cd <guest-path> && grep -n "MCPServer\|server_config\|transport\|tools" cli.py | head -40
cd <guest-path> && grep -rn "missing 'MCPServer'" packages/ | head; grep -rn "MCPServer:" packages/ai-parrot*/src --include=*.py --include=*.yaml | head -5; grep -rn "MCPServer" README.md | head -5
cd <guest-path> && sed -n 90,130p packages/ai-parrot-server/src/parrot/mcp/wrapper.py; grep -n "config" README.md | sed -n 1,20p
cd <guest-path> && sed -n 130,150p packages/ai-parrot-server/src/parrot/mcp/wrapper.py
cd <guest-path> && printf '%s\n' 'MCPServer:' ' name: parrot-memory-mcp' ' transport: stdio' ' tools:' ' - WorkingMemoryToolkit' > server.yaml && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"wm_store_result","arguments":{"key":"probe_note","data":"parrot-probe-7341"}}}' | timeout 120 parrot mcp --config server.yaml 2><guest-path> > <guest-path>; echo "rc=$?"; head -c 1200 <guest-path>; echo; grep -v DEBUG <guest-path> | tail -4
cd <guest-path> && sed -n 60,89p packages/ai-parrot-server/src/parrot/mcp/wrapper.py
cd <guest-path> && printf '%s\n' 'MCPServer:' ' name: parrot-calc-mcp' ' transport: stdio' ' tools:' ' - CalculatorTool' > server.yaml && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | timeout 120 parrot mcp --config server.yaml 2><guest-path> > <guest-path>; echo "rc=$?"; grep -o '"name": *"[^"]*"' <guest-path> | head; grep -i "error" <guest-path> | grep -v DEBUG | tail -3
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && python3 -c "import sys,json;print(json.dumps(json.loads(open('<guest-path>').read().splitlines()[-1]),indent=1)[:800])" 2>/dev/null || tail -c 900 <guest-path>
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"CalculatorTool","arguments":{"operation":"mean","values":[2,4,9]}}}' | timeout 120 parrot mcp --config server.yaml 2><guest-path> > <guest-path>; echo "rc=$?"; tail -c 700 <guest-path>
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && mkdir -p out && rm -f out/my_agent.py && timeout 120 parrot autonomous create --agent out/my_agent.py > <guest-path> 2>&1; echo "rc=$?"; tail -c 600 <guest-path>; echo; ls -la out/; head -c 600 out/my_agent.py 2>/dev/null
cd <guest-path> && grep -n "parrot mcp --config server.yaml\|parrot autonomous create\|parrot conf init\|Initialize configuration directory\|parrot setup\|@schedule" README.md | head -20; rm -f <guest-path>; ls -la <guest-path>; ls -la <guest-path> 2>/dev/null
mkdir -p <guest-path> && cd <guest-path> && cat > probe.json <<'EOF'
{"kind":"mcp","argv":["<guest-path>","mcp","--config","server.yaml"],"cwd":"<guest-path>","env":{"SITE_ROOT":"<guest-path>","PATH":"<guest-path>"},"tool":"CalculatorTool","arguments":{"operation":"mean","values":[2,4,9]},"expected_text":"'result': 5.0"}
EOF
cat > claims.json <<'EOF'
[{"kind":"claim","claim":"Start an MCP server from a YAML config","source":"parrot mcp --config server.yaml","input":"server.yaml with MCPServer.tools = CalculatorTool","expected":"tool result with 'result': 5.0","probe_kind":"mcp","argv":["<guest-path>","mcp","--config","server.yaml"],"tool":"CalculatorTool","arguments":{"operation":"mean","values":[2,4,9]},"expected_text":"'result': 5.0","cwd":"<guest-path>","env":{"SITE_ROOT":"<guest-path>","PATH":"<guest-path>"}}]
EOF
cat > examples.json <<'EOF'
[{"kind":"example","name":"autonomous create sample agent","argv":["<guest-path>","autonomous","create","--agent","out/my_agent.py"],"cwd":"<guest-path>","env":{"SITE_ROOT":"<guest-path>","PATH":"<guest-path>"},"output_directory":"out","expected_file":"out/my_agent.py","expected_text":"Sample AutonomousOrchestrator agent."}]
EOF
cat > cycles.json <<'EOF'
[{"kind":"cycle","name":"scheduler @schedule trigger","detected":false,"reason":"@schedule is registered via the scheduler manager and runs under aiohttp on_startup; no standalone CLI trigger was found, so no cycle was exercised."}]
EOF
cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo "rc=$?"; tail -c 2500 <guest-path>
cd <guest-path> && cat > cycles.json <<'EOF'
{"kind":"cycle","name":"scheduler @schedule trigger","detected":false,"reason":"@schedule is registered via the scheduler manager and runs under aiohttp on_startup; no standalone CLI trigger was found, so no cycle was exercised."}
EOF
cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo "rc=$?"; grep -o '"valid": *[a-z]*' <guest-path> | head -3; grep -o '"cycle_checks": \[[^]]*\]' <guest-path> | head -c 600; echo; grep -o '"outcome": "[^"]*"' <guest-path> | head -10; rm -rf <guest-path>; ls <guest-path>
cd <guest-path> && cat > report.json <<'EOF'
{
"outcome": "partial",
"fault_owner": "product",
"operation": "Install ai-parrot from the pinned commit 5f59e1b7b9018f0075e1e7c720ac57d2aa1f3fe0 and run README CLI operations: parrot mcp --config server.yaml (MCP stdio tool call), parrot autonomous create --agent my_agent.py",
"operation_scope": "Local stdio MCP server and sample-agent scaffolding in a disposable VM; README Quick Start (needs OpenAI credentials), scheduler trigger, and make test were not run.",
"steps": [
"Created a Python 3.12.3 venv at <guest-path> (README requires >=3.11,<3.14) and installed ai-parrot from PyPI, then ai-parrot-tools and ai-parrot-server from the pinned source with pip.",
"Set SITE_ROOT=<guest-path> and scaffolded with kardex env create.",
"parrot conf init failed: navconfig 3.0.0 (pinned in uv.lock) rejects 'kardex create'. Used kardex env create as a workaround.",
"Ran parrot mcp-local memory and called wm_store_result; it returned preview parrot-probe-7341.",
"Wrote server.yaml with an MCPServer root key and ran parrot mcp --config server.yaml. WorkingMemoryToolkit failed to load because the loader only resolves parrot.tools.<name>. CalculatorTool loaded and tools/call returned 'result': 5.0.",
"Ran parrot autonomous create --agent out/my_agent.py; it wrote a sample agent file, verified by the checker replay.",
"Ran the checker with --validate --replay; valid=true."
],
"deviations": [
"Used pip instead of uv for installation.",
"parrot conf init does not work with the pinned navconfig 3.0.0; kardex env create was used instead.",
"The --config loader cannot load WorkingMemoryToolkit (module under parrot.tools.working_memory). The memory probe used parrot mcp-local instead, and the --config claim used CalculatorTool.",
"Did not run the README Quick Start (needs OpenAI credentials), the scheduler, or make test.",
"The autonomous example was verified by checker replay; the checker writes it to a suffixed fresh path."
],
"stuck_step": "parrot conf init (README Installation step); the command fails with exit code 2 and 'invalid choice: create'.",
"main_blocker": "parrot conf init calls kardex create, which navconfig 3.0.0 (pinned in uv.lock) does not provide.",
"plain_failure": "parrot conf init fails with exit 2: kardex: error: argument command: invalid choice: 'create' (choose from 'env', 'vault', 'log').",
"suggested_fix": "Change parrot conf init to call 'kardex env create' (or pin a navconfig version that provides 'kardex create'). Fix the --config loader to resolve toolkits under subpackages such as parrot.tools.working_memory."
}
EOF
python3 -c "import json;json.load(open('report.json'));print('ok')"; ls -la <guest-path>; ls <guest-path> | head -30