@kjerneverk/riotplan-mcp-http 1.0.26-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,97 @@
1
+ # @kjerneverk/riotplan-mcp-http
2
+
3
+ HTTP MCP server for RiotPlan.
4
+
5
+ This package is the network-facing surface of RiotPlan. It exposes every plan
6
+ operation as an MCP tool, resource, or prompt over HTTP using Hono and the
7
+ MCP SDK's `StreamableHTTPTransport`. Clients like Cursor, VS Code extensions,
8
+ and any MCP-compatible agent connect here.
9
+
10
+ ## What lives here
11
+
12
+ ### Server (`src/server-hono.ts`)
13
+
14
+ The Hono application that wires up MCP transport, session management, cloud
15
+ sync, RBAC authentication, plan download/upload routes, and the `/health`
16
+ endpoint. This is the main runtime entry point.
17
+
18
+ ### Tools (`src/tools/`)
19
+
20
+ Every `riotplan_*` MCP tool definition. Each file exports a tool object with
21
+ a name, Zod schema, description, and execute function. Tools cover the full
22
+ plan lifecycle:
23
+
24
+ - **idea** -- create plans, add notes/constraints/questions/evidence/narrative
25
+ - **shaping** -- start shaping, add approaches, compare, select
26
+ - **build** -- prepare caller-side generation instructions from plan artifacts
27
+ - **build-write** -- validate and persist generated plan artifacts and steps
28
+ - **step** -- start, complete, add, remove, move steps
29
+ - **status** -- read plan status
30
+ - **transition** -- move between lifecycle stages
31
+ - **history** -- checkpoints and timeline
32
+ - **catalyst** -- manage catalyst associations
33
+ - **evidence** -- structured evidence writer
34
+ - **reflect** -- step reflections
35
+ - **retrospective** -- generate plan retrospectives
36
+ - **context** -- read plan context for LLM consumption
37
+ - **project** -- bind plans to projects, resolve project context
38
+ - **switch** -- list plans, switch active plan, rename, delete
39
+ - **generate** -- server-side AI plan generation (legacy)
40
+ - **validate** -- plan validation
41
+
42
+ ### Resources (`src/resources/`)
43
+
44
+ MCP resource handlers for read-only access to plan data (plan metadata,
45
+ status, steps, individual step content, idea, shaping, evidence, timeline,
46
+ checkpoints, artifacts, prompts).
47
+
48
+ ### Prompts (`src/prompts/`)
49
+
50
+ MCP prompt templates for guided workflows (create plan, explore idea, shape
51
+ approach, develop plan, execute step, execute plan, track progress, generate
52
+ retrospective).
53
+
54
+ ### Session (`src/session/`)
55
+
56
+ Session management for multi-connection MCP server operation.
57
+
58
+ ### Other
59
+
60
+ - **`rbac.ts`** -- role-based access control engine (API key auth, user/role
61
+ lookup, route-level enforcement).
62
+ - **`bin-http.ts`** -- CLI entry point for starting the HTTP server.
63
+ - **`heartbeat.ts`** -- health/liveness utilities.
64
+ - **`types.ts`** -- MCP-specific type definitions (McpTool, ToolResult,
65
+ ToolExecutionContext, resource types, prompt types).
66
+ - **`uri.ts`** -- `riotplan://` URI parser.
67
+
68
+ ## Dependencies
69
+
70
+ | Package | Role |
71
+ |---|---|
72
+ | `@kjerneverk/riotplan` | Plan operations, types, AI artifact loading, config, status generation, step mutations, reflection writer, plan loader, plan categories |
73
+ | `@kjerneverk/riotplan-core` | Core service composition (lifecycle, status, idea, build helpers) -- used by a subset of tools |
74
+ | `@kjerneverk/riotplan-format` | SQLite provider for direct plan file/step/timeline access |
75
+
76
+ The dependency on `@kjerneverk/riotplan` is currently broad -- tools import
77
+ from subpaths like `@kjerneverk/riotplan/ai/artifacts` and
78
+ `@kjerneverk/riotplan/config`. A future goal is to narrow this so the MCP
79
+ server depends only on well-defined service interfaces rather than reaching
80
+ into riotplan internals.
81
+
82
+ ## Development
83
+
84
+ During development, use `npm link` to resolve sibling packages:
85
+
86
+ ```bash
87
+ cd ../riotplan && npm link
88
+ cd ../riotplan-core && npm link
89
+ cd ../riotplan-mcp-http && npm link @kjerneverk/riotplan @kjerneverk/riotplan-core @kjerneverk/riotplan-format
90
+ ```
91
+
92
+ ## Status
93
+
94
+ Extraction in progress. Source code is real (copied from `riotplan/src/mcp/`
95
+ with imports rewritten to use package paths). The identical source still
96
+ exists in `riotplan/src/mcp/` and is tested through the `riotplan` test
97
+ suite. Standalone build, tests, and npm publishing are not yet configured.
@@ -0,0 +1,29 @@
1
+ FROM node:24-bookworm-slim AS builder
2
+
3
+ WORKDIR /app
4
+
5
+ # Native modules (better-sqlite3) may compile in CI.
6
+ RUN apt-get update \
7
+ && apt-get install -y --no-install-recommends python3 make g++ \
8
+ && rm -rf /var/lib/apt/lists/*
9
+
10
+ COPY package*.json ./
11
+ RUN npm install
12
+
13
+ COPY . .
14
+ RUN npm run build
15
+ RUN npm prune --omit=dev
16
+
17
+ FROM node:24-bookworm-slim AS runtime
18
+
19
+ WORKDIR /app
20
+ ENV NODE_ENV=production
21
+
22
+ COPY --from=builder /app/package*.json ./
23
+ COPY --from=builder /app/node_modules ./node_modules
24
+ COPY --from=builder /app/dist ./dist
25
+
26
+ EXPOSE 8080
27
+
28
+ # Cloud Run provides PORT; riotplan-mcp-http reads PORT and MCP_PORT.
29
+ CMD ["node", "dist/bin-http.js"]
@@ -0,0 +1,26 @@
1
+ FROM node:24-bookworm-slim
2
+
3
+ WORKDIR /app
4
+ ENV NODE_ENV=production
5
+
6
+ # Native toolchain helps if optional native deps need rebuild.
7
+ RUN apt-get update \
8
+ && apt-get install -y --no-install-recommends \
9
+ python3 \
10
+ make \
11
+ g++ \
12
+ && rm -rf /var/lib/apt/lists/*
13
+
14
+ ARG RIOTPLAN_MCP_HTTP_VERSION=latest
15
+
16
+ # Install riotplan-mcp-http from npm.
17
+ RUN if [ "$RIOTPLAN_MCP_HTTP_VERSION" = "latest" ]; then \
18
+ npm install -g @kjerneverk/riotplan-mcp-http@latest; \
19
+ else \
20
+ npm install -g "@kjerneverk/riotplan-mcp-http@${RIOTPLAN_MCP_HTTP_VERSION}"; \
21
+ fi
22
+
23
+ EXPOSE 8080
24
+
25
+ # Cloud Run provides PORT; riotplan-mcp-http reads PORT and MCP_PORT.
26
+ CMD ["riotplan-mcp-http"]
@@ -0,0 +1,61 @@
1
+ substitutions:
2
+ _REGION: us-central1
3
+ _SERVICE_NAME: riotplan-mcp
4
+ _AR_REPO: riotplan
5
+ _IMAGE_NAME: riotplan-mcp
6
+ _SERVICE_ACCOUNT: riotplan-runtime@${PROJECT_ID}.iam.gserviceaccount.com
7
+ _ENV_VARS_FILE: env.prod.yaml
8
+ _OPENAI_SECRET: riotplan-openai-api-key
9
+ _RIOTPLAN_MCP_HTTP_VERSION: latest
10
+ _REQUEST_TIMEOUT: "3600"
11
+ _MIN_INSTANCES: "1"
12
+
13
+ steps:
14
+ - name: gcr.io/cloud-builders/docker
15
+ id: build-image
16
+ args:
17
+ - build
18
+ - -f
19
+ - Dockerfile.from-npm
20
+ - --build-arg
21
+ - RIOTPLAN_MCP_HTTP_VERSION=${_RIOTPLAN_MCP_HTTP_VERSION}
22
+ - -t
23
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:${BUILD_ID}
24
+ - -t
25
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:latest
26
+ - .
27
+
28
+ - name: gcr.io/cloud-builders/docker
29
+ id: push-sha
30
+ args:
31
+ - push
32
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:${BUILD_ID}
33
+
34
+ - name: gcr.io/cloud-builders/docker
35
+ id: push-latest
36
+ args:
37
+ - push
38
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:latest
39
+
40
+ - name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
41
+ id: deploy-cloud-run
42
+ entrypoint: gcloud
43
+ args:
44
+ - run
45
+ - deploy
46
+ - ${_SERVICE_NAME}
47
+ - --region=${_REGION}
48
+ - --platform=managed
49
+ - --allow-unauthenticated
50
+ - --port=8080
51
+ - --image=${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:${BUILD_ID}
52
+ - --service-account=${_SERVICE_ACCOUNT}
53
+ - --env-vars-file=${_ENV_VARS_FILE}
54
+ - --update-secrets=OPENAI_API_KEY=${_OPENAI_SECRET}:latest
55
+ - --timeout=${_REQUEST_TIMEOUT}
56
+ - --min-instances=${_MIN_INSTANCES}
57
+ - --no-cpu-throttling
58
+
59
+ images:
60
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:${BUILD_ID}
61
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:latest
@@ -0,0 +1,58 @@
1
+ substitutions:
2
+ _REGION: us-central1
3
+ _SERVICE_NAME: riotplan-mcp
4
+ _AR_REPO: riotplan
5
+ _IMAGE_NAME: riotplan-mcp
6
+ _SERVICE_ACCOUNT: riotplan-runtime@${PROJECT_ID}.iam.gserviceaccount.com
7
+ _ENV_VARS_FILE: deploy/cloud-run/env.example.yaml
8
+ _OPENAI_SECRET: riotplan-openai-api-key
9
+ _REQUEST_TIMEOUT: "3600"
10
+ _MIN_INSTANCES: "1"
11
+
12
+ steps:
13
+ - name: gcr.io/cloud-builders/docker
14
+ id: build-image
15
+ args:
16
+ - build
17
+ - -f
18
+ - deploy/cloud-run/Dockerfile
19
+ - -t
20
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:${BUILD_ID}
21
+ - -t
22
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:latest
23
+ - .
24
+
25
+ - name: gcr.io/cloud-builders/docker
26
+ id: push-sha
27
+ args:
28
+ - push
29
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:${BUILD_ID}
30
+
31
+ - name: gcr.io/cloud-builders/docker
32
+ id: push-latest
33
+ args:
34
+ - push
35
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:latest
36
+
37
+ - name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
38
+ id: deploy-cloud-run
39
+ entrypoint: gcloud
40
+ args:
41
+ - run
42
+ - deploy
43
+ - ${_SERVICE_NAME}
44
+ - --region=${_REGION}
45
+ - --platform=managed
46
+ - --allow-unauthenticated
47
+ - --port=8080
48
+ - --image=${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:${BUILD_ID}
49
+ - --service-account=${_SERVICE_ACCOUNT}
50
+ - --env-vars-file=${_ENV_VARS_FILE}
51
+ - --update-secrets=OPENAI_API_KEY=${_OPENAI_SECRET}:latest
52
+ - --timeout=${_REQUEST_TIMEOUT}
53
+ - --min-instances=${_MIN_INSTANCES}
54
+ - --no-cpu-throttling
55
+
56
+ images:
57
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:${BUILD_ID}
58
+ - ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO}/${_IMAGE_NAME}:latest
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+
6
+ PROJECT_ID="${PROJECT_ID:-discursive}"
7
+ REGION="${REGION:-us-central1}"
8
+ SERVICE_NAME="${SERVICE_NAME:-riotplan-mcp}"
9
+ AR_REPO="${AR_REPO:-riotplan}"
10
+ IMAGE_NAME="${IMAGE_NAME:-riotplan-mcp}"
11
+ SERVICE_ACCOUNT="${SERVICE_ACCOUNT:-riotplan-runtime@${PROJECT_ID}.iam.gserviceaccount.com}"
12
+ OPENAI_SECRET="${OPENAI_SECRET:-riotplan-openai-api-key}"
13
+ RIOTPLAN_MCP_HTTP_VERSION="${RIOTPLAN_MCP_HTTP_VERSION:-latest}"
14
+ ENV_FILE="${ENV_FILE:-${SCRIPT_DIR}/env.prod.yaml}"
15
+ STORAGE_ROLE="${STORAGE_ROLE:-roles/storage.objectAdmin}"
16
+ SKIP_STORAGE_IAM="${SKIP_STORAGE_IAM:-false}"
17
+ REQUEST_TIMEOUT="${REQUEST_TIMEOUT:-3600}"
18
+ MIN_INSTANCES="${MIN_INSTANCES:-1}"
19
+
20
+ if [[ ! -f "${ENV_FILE}" ]]; then
21
+ echo "Missing env file: ${ENV_FILE}"
22
+ echo "Copy ${SCRIPT_DIR}/env.example.yaml to ${SCRIPT_DIR}/env.prod.yaml and edit values."
23
+ exit 1
24
+ fi
25
+
26
+ extract_yaml_value() {
27
+ local key="$1"
28
+ local file="$2"
29
+ sed -nE "s/^${key}:[[:space:]]*\"?([^\"#]+)\"?.*$/\1/p" "${file}" | sed -n '1p'
30
+ }
31
+
32
+ grant_bucket_access() {
33
+ local bucket="$1"
34
+ if [[ -z "${bucket}" ]]; then
35
+ return 0
36
+ fi
37
+ echo "Ensuring ${SERVICE_ACCOUNT} has ${STORAGE_ROLE} on gs://${bucket}"
38
+ gcloud storage buckets add-iam-policy-binding "gs://${bucket}" \
39
+ --project="${PROJECT_ID}" \
40
+ --member="serviceAccount:${SERVICE_ACCOUNT}" \
41
+ --role="${STORAGE_ROLE}" \
42
+ --quiet
43
+ }
44
+
45
+ echo "Deploying @kjerneverk/riotplan-mcp-http version: ${RIOTPLAN_MCP_HTTP_VERSION}"
46
+ echo "Project: ${PROJECT_ID}, Region: ${REGION}, Service: ${SERVICE_NAME}"
47
+ echo "Env file: ${ENV_FILE}"
48
+ echo "Cloud Run timeout: ${REQUEST_TIMEOUT}s, min instances: ${MIN_INSTANCES}, CPU: always allocated"
49
+
50
+ if [[ "${SKIP_STORAGE_IAM}" != "true" ]]; then
51
+ PLAN_BUCKET="$(extract_yaml_value "RIOTPLAN_PLAN_BUCKET" "${ENV_FILE}")"
52
+ CONTEXT_BUCKET="$(extract_yaml_value "RIOTPLAN_CONTEXT_BUCKET" "${ENV_FILE}")"
53
+
54
+ declare -A BUCKETS=()
55
+ [[ -n "${PLAN_BUCKET}" ]] && BUCKETS["${PLAN_BUCKET}"]=1
56
+ [[ -n "${CONTEXT_BUCKET}" ]] && BUCKETS["${CONTEXT_BUCKET}"]=1
57
+
58
+ if [[ ${#BUCKETS[@]} -gt 0 ]]; then
59
+ echo "Applying Cloud Storage IAM for runtime access..."
60
+ for BUCKET in "${!BUCKETS[@]}"; do
61
+ grant_bucket_access "${BUCKET}"
62
+ done
63
+ else
64
+ echo "No RIOTPLAN_*_BUCKET values found in ${ENV_FILE}; skipping IAM binding."
65
+ fi
66
+ else
67
+ echo "SKIP_STORAGE_IAM=true, skipping bucket IAM binding."
68
+ fi
69
+
70
+ gcloud builds submit "${SCRIPT_DIR}" \
71
+ --project="${PROJECT_ID}" \
72
+ --config="${SCRIPT_DIR}/cloudbuild.from-npm.yaml" \
73
+ --substitutions="_REGION=${REGION},_SERVICE_NAME=${SERVICE_NAME},_AR_REPO=${AR_REPO},_IMAGE_NAME=${IMAGE_NAME},_SERVICE_ACCOUNT=${SERVICE_ACCOUNT},_ENV_VARS_FILE=$(basename "${ENV_FILE}"),_OPENAI_SECRET=${OPENAI_SECRET},_RIOTPLAN_MCP_HTTP_VERSION=${RIOTPLAN_MCP_HTTP_VERSION},_REQUEST_TIMEOUT=${REQUEST_TIMEOUT},_MIN_INSTANCES=${MIN_INSTANCES}"
@@ -0,0 +1,17 @@
1
+ MCP_PORT: "8080"
2
+ RIOTPLAN_DEBUG: "true"
3
+ RIOTPLAN_HTTP_SECURED: "false"
4
+ RBAC_USERS_PATH: "/var/run/riotplan-rbac/users.yaml"
5
+ RBAC_KEYS_PATH: "/var/run/riotplan-rbac/keys.yaml"
6
+ RBAC_POLICY_PATH: "/var/run/riotplan-rbac/policy.yaml"
7
+ RBAC_RELOAD_SECONDS: "0"
8
+ RIOTPLAN_CLOUD_ENABLED: "true"
9
+ RIOTPLAN_CLOUD_INCREMENTAL_SYNC_ENABLED: "true"
10
+ RIOTPLAN_CLOUD_SYNC_FRESHNESS_TTL_MS: "5000"
11
+ RIOTPLAN_CLOUD_SYNC_TIMEOUT_MS: "120000"
12
+ RIOTPLAN_PLAN_BUCKET: "riotplan"
13
+ RIOTPLAN_PLAN_PREFIX: "plans"
14
+ RIOTPLAN_CONTEXT_BUCKET: "redaksjon"
15
+ RIOTPLAN_CONTEXT_PREFIX: "context"
16
+ RIOTPLAN_CLOUD_CACHE_DIR: "/tmp/riotplan-cache"
17
+ GOOGLE_CLOUD_PROJECT: "discursive"
@@ -0,0 +1,14 @@
1
+ keys:
2
+ - key_id: key-reader
3
+ # Use scrypt format: scrypt$N$r$p$<salt_base64>$<derived_key_base64>
4
+ secret_hash: "scrypt$16384$8$1$REPLACE_WITH_BASE64_SALT$REPLACE_WITH_BASE64_HASH"
5
+ user_id: user-reader
6
+ enabled: true
7
+ created_at: "2026-03-03T00:00:00Z"
8
+ expires_at: null
9
+ - key_id: key-admin
10
+ secret_hash: "scrypt$16384$8$1$REPLACE_WITH_BASE64_SALT$REPLACE_WITH_BASE64_HASH"
11
+ user_id: user-admin
12
+ enabled: true
13
+ created_at: "2026-03-03T00:00:00Z"
14
+ expires_at: null
@@ -0,0 +1,17 @@
1
+ rules:
2
+ "GET /health":
3
+ public: true
4
+ "GET /auth/whoami":
5
+ any_roles: ["*"]
6
+ "GET /admin/ping":
7
+ any_roles: [admin]
8
+ "GET /plan/:planId":
9
+ any_roles: ["*"]
10
+ "POST /plan/upload":
11
+ any_roles: [admin]
12
+ "POST /mcp":
13
+ any_roles: ["*"]
14
+ "GET /mcp":
15
+ any_roles: ["*"]
16
+ "DELETE /mcp":
17
+ any_roles: ["*"]
@@ -0,0 +1,11 @@
1
+ users:
2
+ - id: user-reader
3
+ display_name: Reader User
4
+ roles: [reader]
5
+ enabled: true
6
+ created_at: "2026-03-03T00:00:00Z"
7
+ - id: user-admin
8
+ display_name: Admin User
9
+ roles: [admin]
10
+ enabled: true
11
+ created_at: "2026-03-03T00:00:00Z"
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
6
+ SERVER_ENTRYPOINT="${REPO_ROOT}/dist/bin-http.js"
7
+
8
+ HOST="${RIOTPLAN_HOST:-127.0.0.1}"
9
+ PORT="${RIOTPLAN_MCP_PORT:-3002}"
10
+ PLANS_DIR="${RIOTPLAN_PLANS_DIR:-${SCRIPT_DIR}/plans}"
11
+ CONTEXT_DIR="${RIOTPLAN_CONTEXT_DIR:-${SCRIPT_DIR}/context}"
12
+
13
+ if [[ ! -f "${SERVER_ENTRYPOINT}" ]]; then
14
+ echo "Missing server entrypoint: ${SERVER_ENTRYPOINT}" >&2
15
+ echo "Build riotplan-mcp-http first (from ${REPO_ROOT}): npm run build" >&2
16
+ exit 1
17
+ fi
18
+
19
+ mkdir -p "${PLANS_DIR}" "${CONTEXT_DIR}"
20
+
21
+ echo "Starting local RiotPlan MCP HTTP server"
22
+ echo "Entrypoint: ${SERVER_ENTRYPOINT}"
23
+ echo "Plans dir: ${PLANS_DIR}"
24
+ echo "Context dir: ${CONTEXT_DIR}"
25
+ echo "URL: http://${HOST}:${PORT}"
26
+ echo "Health: http://${HOST}:${PORT}/health"
27
+
28
+ exec node "${SERVER_ENTRYPOINT}" \
29
+ --port "${PORT}" \
30
+ --plans-dir "${PLANS_DIR}" \
31
+ --context-dir "${CONTEXT_DIR}" \
32
+ "$@"
@@ -0,0 +1,39 @@
1
+ SUGGESTED_SPLITS:
2
+ Split 1:
3
+ Files: [
4
+ ".gitignore",
5
+ "deploy/cloud-run/.gitignore",
6
+ "deploy/cloud-run/Dockerfile",
7
+ "deploy/cloud-run/Dockerfile.from-npm",
8
+ "deploy/cloud-run/cloudbuild.from-npm.yaml",
9
+ "deploy/cloud-run/cloudbuild.yaml",
10
+ "deploy/cloud-run/deploy-prod.sh",
11
+ "deploy/cloud-run/env.example.yaml",
12
+ "deploy/cloud-run/rbac-keys.example.yaml",
13
+ "deploy/cloud-run/rbac-policy.example.yaml",
14
+ "deploy/cloud-run/rbac-users.example.yaml",
15
+ "deploy/local/.gitignore",
16
+ "deploy/local/riotplan-local.sh"
17
+ ]
18
+ Rationale: These files are focused on the deployment setup and configuration for both local and cloud-run environments. They were all modified within a short time frame during the same session, indicating they are part of a cohesive change.
19
+ Message: configure deployment setup for local and Cloud Run environments
20
+
21
+ Split 2:
22
+ Files: [
23
+ "deploy/local/README.md",
24
+ "guide/cloud-run.md"
25
+ ]
26
+ Rationale: This set of files relates to documentation updates. The changes are focused on improving user guides and instructions, which can be reviewed independently of the deployment configuration changes.
27
+ Message: update README and guides for local and Cloud Run usage
28
+
29
+ Split 3:
30
+ Files: [
31
+ "src/tools/context.ts",
32
+ "src/tools/idea.ts",
33
+ "src/tools/reflect.ts",
34
+ "src/tools/shaping.ts",
35
+ "src/tools/status.ts",
36
+ "src/tools/step.ts"
37
+ ]
38
+ Rationale: These files are all part of the source code and represent changes to various tools within the application. They were modified as part of a separate work session focused on development rather than configuration or documentation.
39
+ Message: refactor tools for enhanced functionality and maintainability
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@kjerneverk/riotplan-mcp-http",
3
+ "version": "1.0.26-dev.0",
4
+ "description": "HTTP MCP server package for RiotPlan",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "engines": {
15
+ "node": ">=24.0.0"
16
+ },
17
+ "scripts": {
18
+ "clean": "rm -rf dist",
19
+ "build": "echo \"MCP HTTP extraction in progress\"",
20
+ "test": "echo \"No standalone tests yet\"",
21
+ "test:coverage": "npm run test",
22
+ "lint": "echo \"No standalone lint yet\"",
23
+ "precommit": "npm run build && npm run lint && npm run test",
24
+ "prepublishOnly": "npm run clean && npm run build"
25
+ },
26
+ "keywords": [
27
+ "riotplan",
28
+ "mcp",
29
+ "http",
30
+ "server"
31
+ ],
32
+ "author": "Tim O'Brien <tobrien@discursive.com>",
33
+ "license": "Apache-2.0",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/kjerneverk/riotplan-mcp-http"
37
+ },
38
+ "dependencies": {
39
+ "@kjerneverk/riotplan": "^1.0.26-dev.0",
40
+ "@kjerneverk/riotplan-core": "^1.0.26-dev.0",
41
+ "@kjerneverk/riotplan-format": "^1.0.1"
42
+ }
43
+ }