Skip to content

README polish: drop em dashes, fix stale Limitations note, TOC entry #3

README polish: drop em dashes, fix stale Limitations note, TOC entry

README polish: drop em dashes, fix stale Limitations note, TOC entry #3

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
r-cmd-check:
name: R CMD check
runs-on: ubuntu-latest
env:
_R_CHECK_FORCE_SUGGESTS_: false
steps:
- uses: actions/checkout@v4
- uses: r-lib/actions/setup-r@v2
with:
use-public-rspm: true
- uses: r-lib/actions/setup-r-dependencies@v2
with:
dependencies: '"hard"'
extra-packages: any::rcmdcheck
- uses: r-lib/actions/check-r-package@v2
with:
error-on: '"warning"'
args: 'c("--no-manual")'
r-checks:
name: R parse + functional checks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: r-lib/actions/setup-r@v2
with:
use-public-rspm: true
- name: Install jsonlite
run: Rscript -e 'install.packages("jsonlite")'
- name: Run checks
run: Rscript .github/scripts/checks.R
bridge-smoke:
name: MCP bridge build + stdio handshake
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
- name: Bridge copies must be identical
run: diff clauder-mcp/src/clauder_mcp/server.py inst/scripts/persistent_r_mcp.py
- name: Build wheel
run: uv build
working-directory: clauder-mcp
- name: Install wheel
run: |
uv venv smoke
uv pip install --python smoke/bin/python clauder-mcp/dist/*.whl pytest
- name: Unit tests
run: smoke/bin/python -m pytest clauder-mcp/tests -q
- name: stdio initialize + tools/list handshake
run: |
printf '%s\n%s\n%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"ci","version":"0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
| timeout 30 smoke/bin/clauder-mcp 2>/dev/null \
| python3 -c '
import json, sys
seen = {}
for line in sys.stdin:
m = json.loads(line)
if m.get("id") in (1, 2):
seen[m["id"]] = m
assert seen[1]["result"]["serverInfo"]["name"] == "r-studio", seen.get(1)
tools = seen[2]["result"]["tools"]
assert len(tools) >= 25, f"expected >= 25 tools, got {len(tools)}"
print(f"handshake OK, {len(tools)} tools")
'