Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
7730ca7
m1: AgentKeys MCP server — Phase 1 (closes #107)
hanwencheng May 25, 2026
8d3590c
m1: MCP server dev-mode demo (--backend in-memory) + runbook
hanwencheng May 25, 2026
25d7298
m1: MCP server — verify Mode B protocol layer against real Anthropic …
hanwencheng May 25, 2026
f34abe7
m1: MCP server — Mode C verification (xiaozhi-server's own ServerMCPC…
hanwencheng May 25, 2026
110637b
m1: MCP server — Phase A hardened per Codex adversarial review
hanwencheng May 25, 2026
c06f352
m1: MCP server — xiaozhi MCP-endpoint transport + new §B runbook
hanwencheng May 25, 2026
c0b4ee5
m1: MCP server — runbook §A one-liner + §B.0 testing ladder + CI runs…
hanwencheng May 25, 2026
4ef93d6
m1: MCP server — clarify §B.4 chain targeting (verify hits PROD addre…
hanwencheng May 25, 2026
41e4ca9
m1: MCP server — apply rustfmt to satisfy global `cargo fmt --all -- …
hanwencheng May 25, 2026
53821b8
m1: MCP server — idempotent setup-mcp-host.sh (mcp.litentry.org + wss)
hanwencheng May 25, 2026
2838e70
m1: setup-mcp-host.sh — drop made-up ops@litentry.org, mirror broker …
hanwencheng May 25, 2026
8200c58
m1: setup-mcp-host.sh — install python3-venv + recover broken half-venv
hanwencheng May 25, 2026
acdf956
m1: setup-mcp-host.sh — fix nginx http2 syntax + two-phase certbot
hanwencheng May 25, 2026
2f784ba
scripts: setup-mcp-host.sh DNS pre-flight before certbot
hanwencheng May 25, 2026
925d56b
docs: add §B.6 fresh-laptop xiaozhi-server walkthrough to MCP runbook
hanwencheng May 25, 2026
8ed5d24
scripts: setup-mcp-host.sh auto-manages Route53 A record
hanwencheng May 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 89 additions & 0 deletions .github/workflows/mcp-server.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: mcp-server

on:
push:
branches: [main]
paths:
- "crates/agentkeys-mcp-server/**"
- "scripts/mcp-demo-mode-a.sh"
- "scripts/mcp-demo-mode-b-protocol.sh"
- "scripts/mcp-demo-mode-c-xiaozhi-client.sh"
- "scripts/mcp-demo-mode-d-xiaozhi-endpoint.sh"
- "Cargo.toml"
- "Cargo.lock"
- ".github/workflows/mcp-server.yml"
pull_request:
paths:
- "crates/agentkeys-mcp-server/**"
- "scripts/mcp-demo-mode-a.sh"
- "scripts/mcp-demo-mode-b-protocol.sh"
- "scripts/mcp-demo-mode-c-xiaozhi-client.sh"
- "scripts/mcp-demo-mode-d-xiaozhi-endpoint.sh"
- "Cargo.toml"
- "Cargo.lock"
- ".github/workflows/mcp-server.yml"

permissions:
contents: read
packages: write

jobs:
test:
name: test + clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
with:
workspaces: ". -> target"
- name: cargo test
run: cargo test -p agentkeys-mcp-server --all-features
- name: cargo clippy
run: cargo clippy -p agentkeys-mcp-server --all-targets -- -D warnings
# Phase A dev-mode demo smoke — boots the binary with --backend in-memory
# and walks the three-act storyboard end-to-end via curl. Catches drift
# between code and runbook §A in `docs/spec/plans/issue-107-mcp-demo-runbook.md`.
- name: mcp demo (mode A — dev smoke)
run: bash scripts/mcp-demo-mode-a.sh

# Phase B testing ladder (runbook §B.0). Modes B/C/D need `uv` to manage
# a Python venv on the fly so the official Anthropic mcp SDK + xiaozhi-
# server's own integration class can drive our server. These tiers catch
# bugs at the MCP wire layer, the xiaozhi integration layer, and the
# relay-topology layer respectively. No live broker or xiaozhi account.
- name: install uv (for modes B/C/D)
run: curl -LsSf https://astral.sh/uv/install.sh | sh
- name: mcp demo (mode B — Anthropic mcp SDK protocol smoke)
run: bash scripts/mcp-demo-mode-b-protocol.sh
- name: mcp demo (mode C — xiaozhi ServerMCPClient integration)
run: bash scripts/mcp-demo-mode-c-xiaozhi-client.sh
- name: mcp demo (mode D — xiaozhi MCP-endpoint relay topology)
run: bash scripts/mcp-demo-mode-d-xiaozhi-endpoint.sh

image:
name: build + publish image
needs: test
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: build + push
uses: docker/build-push-action@v6
with:
context: .
file: crates/agentkeys-mcp-server/Dockerfile
push: true
tags: |
ghcr.io/${{ github.repository }}/agentkeys-mcp-server:latest
ghcr.io/${{ github.repository }}/agentkeys-mcp-server:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
110 changes: 99 additions & 11 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ members = [
"crates/agentkeys-cli",
"crates/agentkeys-daemon",
"crates/agentkeys-mcp",
"crates/agentkeys-mcp-server",
"crates/agentkeys-provisioner",
"crates/agentkeys-broker-server",
"crates/agentkeys-worker-creds",
Expand Down
38 changes: 38 additions & 0 deletions crates/agentkeys-mcp-server/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[package]
name = "agentkeys-mcp-server"
version = "0.1.0"
edition = "2021"

[[bin]]
name = "agentkeys-mcp-server"
path = "src/main.rs"

[lib]
name = "agentkeys_mcp_server"
path = "src/lib.rs"

[dependencies]
agentkeys-types = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
tokio = { workspace = true }
async-trait = { workspace = true }
thiserror = { workspace = true }
anyhow = { workspace = true }
axum = { version = "0.7", features = ["json"] }
tower = "0.4"
reqwest = { version = "0.12", features = ["json"] }
tokio-tungstenite = "0.23"
futures-util = "0.3"
clap = { version = "4", features = ["derive", "env"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
base64 = "0.22"
hex = "0.4"
sha2 = "0.10"
uuid = { version = "1", features = ["v4"] }

[dev-dependencies]
tokio = { workspace = true }
tower = { version = "0.4", features = ["util"] }
http-body-util = "0.1"
Loading
Loading