Skip to content

Commit e377a90

Browse files
authored
Upgrade the monorepo to MCP TypeScript SDK v2 and ship @mcpjam/sdk 1.0.0 (#1791)
1 parent 87dab33 commit e377a90

File tree

122 files changed

+1984
-611
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

122 files changed

+1984
-611
lines changed

.github/workflows/pr-preview.yml

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ jobs:
4848
- name: Checkout code
4949
uses: actions/checkout@v4
5050

51+
- name: Resolve deployed commit metadata
52+
id: preview_commit
53+
run: |
54+
echo "deployed_sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
55+
echo "head_sha=${{ github.event.pull_request.head.sha }}" >> "$GITHUB_OUTPUT"
56+
5157
- name: Install preview tooling
5258
run: npm install -g @railway/cli workos
5359

@@ -165,6 +171,8 @@ jobs:
165171
event_type: "inspector_preview_requested",
166172
client_payload: {
167173
branch: "${{ steps.meta.outputs.branch }}",
174+
inspector_sha: "${{ steps.preview_commit.outputs.deployed_sha }}",
175+
inspector_head_sha: "${{ steps.preview_commit.outputs.head_sha }}",
168176
inspector_repo: context.repo.owner + "/" + context.repo.repo,
169177
inspector_pr_number: context.payload.pull_request.number,
170178
inspector_environment: "${{ steps.meta.outputs.environment }}",
@@ -177,21 +185,35 @@ jobs:
177185
env:
178186
PREVIEW_URL: ${{ steps.preview_domain.outputs.url }}
179187
BACKEND_MODE: ${{ steps.backend_branch.outputs.exists == 'true' && 'preview requested' || 'staging fallback' }}
188+
PREVIEW_DEPLOYED_SHA: ${{ steps.preview_commit.outputs.deployed_sha }}
189+
PREVIEW_HEAD_SHA: ${{ steps.preview_commit.outputs.head_sha }}
180190
with:
181191
script: |
182192
const marker = process.env.PREVIEW_COMMENT_MARKER;
183193
const previewUrl = process.env.PREVIEW_URL;
184194
const backendMode = process.env.BACKEND_MODE;
195+
const deployedSha = process.env.PREVIEW_DEPLOYED_SHA;
196+
const headSha = process.env.PREVIEW_HEAD_SHA;
185197
const issue_number = context.payload.pull_request.number;
198+
const commitLink = (sha) =>
199+
sha
200+
? `[${sha.slice(0, 7)}](https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${sha})`
201+
: null;
186202
const bodyLines = [
187203
marker,
188204
"### Internal preview",
189205
previewUrl
190206
? `Preview URL: ${previewUrl}`
191207
: "Preview URL will appear in Railway after the deploy finishes.",
208+
deployedSha
209+
? `Deployed commit: ${commitLink(deployedSha)}`
210+
: null,
211+
headSha && headSha !== deployedSha
212+
? `PR head commit: ${commitLink(headSha)}`
213+
: null,
192214
`Backend target: ${backendMode}.`,
193215
"Access is employee-only in non-production environments.",
194-
];
216+
].filter(Boolean);
195217
const body = bodyLines.join("\n");
196218
197219
const comments = await github.paginate(github.rest.issues.listComments, {
@@ -240,7 +262,13 @@ jobs:
240262
- name: Checkout default branch
241263
uses: actions/checkout@v4
242264
with:
243-
ref: ${{ github.event.client_payload.inspector_git_ref || 'main' }}
265+
ref: ${{ github.event.client_payload.inspector_sha || github.event.client_payload.inspector_git_ref || github.event.client_payload.branch || 'main' }}
266+
267+
- name: Resolve deployed commit metadata
268+
id: preview_commit
269+
run: |
270+
echo "deployed_sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
271+
echo "head_sha=${{ github.event.client_payload.inspector_head_sha || '' }}" >> "$GITHUB_OUTPUT"
244272
245273
- name: Install preview tooling
246274
run: npm install -g @railway/cli workos
@@ -363,6 +391,8 @@ jobs:
363391
event_type: "inspector_preview_requested",
364392
client_payload: {
365393
branch: "${{ steps.meta.outputs.branch }}",
394+
inspector_sha: "${{ steps.preview_commit.outputs.deployed_sha }}",
395+
inspector_head_sha: "${{ steps.preview_commit.outputs.head_sha || steps.preview_commit.outputs.deployed_sha }}",
366396
inspector_repo: context.repo.owner + "/" + context.repo.repo,
367397
inspector_pr_number: "0",
368398
inspector_environment: "${{ steps.meta.outputs.environment }}",
@@ -379,11 +409,15 @@ jobs:
379409
PREVIEW_URL: ${{ steps.preview_domain.outputs.url }}
380410
BACKEND_REPO_FULL: ${{ github.event.client_payload.backend_repo }}
381411
BACKEND_PR_NUMBER: ${{ github.event.client_payload.backend_pr_number }}
412+
PREVIEW_DEPLOYED_SHA: ${{ steps.preview_commit.outputs.deployed_sha }}
413+
PREVIEW_HEAD_SHA: ${{ steps.preview_commit.outputs.head_sha || steps.preview_commit.outputs.deployed_sha }}
382414
with:
383415
github-token: ${{ secrets.BACKEND_PREVIEW_DISPATCH_TOKEN }}
384416
script: |
385417
const marker = process.env.PREVIEW_COMMENT_MARKER;
386418
const previewUrl = process.env.PREVIEW_URL;
419+
const deployedSha = process.env.PREVIEW_DEPLOYED_SHA;
420+
const headSha = process.env.PREVIEW_HEAD_SHA;
387421
if (process.env.BACKEND_REPO_FULL !== process.env.BACKEND_REPO) {
388422
core.setFailed(
389423
`backend_repo '${process.env.BACKEND_REPO_FULL}' does not match allowed repo '${process.env.BACKEND_REPO}'`
@@ -402,9 +436,15 @@ jobs:
402436
previewUrl
403437
? `Preview URL: ${previewUrl}`
404438
: "Preview URL will appear in Railway after the deploy finishes.",
439+
deployedSha
440+
? `Deployed commit: [${deployedSha.slice(0, 7)}](https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${deployedSha})`
441+
: null,
442+
headSha && headSha !== deployedSha
443+
? `PR head commit: [${headSha.slice(0, 7)}](https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${headSha})`
444+
: null,
405445
"Backend target: Convex preview requested (falls back to staging if deploy fails).",
406446
"Access is employee-only in non-production environments.",
407-
];
447+
].filter(Boolean);
408448
const body = bodyLines.join("\n");
409449
const comments = await github.paginate(github.rest.issues.listComments, {
410450
owner,
@@ -512,6 +552,14 @@ jobs:
512552
steps:
513553
- name: Checkout code
514554
uses: actions/checkout@v4
555+
with:
556+
ref: ${{ github.event.client_payload.inspector_sha || github.event.client_payload.inspector_git_ref || github.event.client_payload.branch || 'main' }}
557+
558+
- name: Resolve deployed commit metadata
559+
id: preview_commit
560+
run: |
561+
echo "deployed_sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
562+
echo "head_sha=${{ github.event.client_payload.inspector_head_sha || '' }}" >> "$GITHUB_OUTPUT"
515563
516564
- name: Install preview tooling
517565
run: npm install -g @railway/cli workos
@@ -604,12 +652,16 @@ jobs:
604652
env:
605653
PREVIEW_URL: ${{ steps.preview_domain.outputs.url }}
606654
BACKEND_MODE: ${{ steps.backend_target.outputs.backend_mode }}
655+
PREVIEW_DEPLOYED_SHA: ${{ steps.preview_commit.outputs.deployed_sha }}
656+
PREVIEW_HEAD_SHA: ${{ steps.preview_commit.outputs.head_sha }}
607657
CROSS_REPO_TOKEN: ${{ secrets.BACKEND_PREVIEW_DISPATCH_TOKEN }}
608658
BACKEND_REPO: ${{ vars.MCPJAM_BACKEND_REPO || 'MCPJam/mcpjam-backend' }}
609659
with:
610660
github-token: ${{ (github.event.client_payload.comment_issue_owner || '') != '' && secrets.BACKEND_PREVIEW_DISPATCH_TOKEN || github.token }}
611661
script: |
612662
const marker = process.env.PREVIEW_COMMENT_MARKER;
663+
const deployedSha = process.env.PREVIEW_DEPLOYED_SHA;
664+
const headSha = process.env.PREVIEW_HEAD_SHA;
613665
const p = context.payload.client_payload;
614666
const issueOwner = p.comment_issue_owner;
615667
const issueRepo = p.comment_issue_repo;
@@ -618,6 +670,10 @@ jobs:
618670
: Number(p.inspector_pr_number);
619671
const owner = issueOwner || context.repo.owner;
620672
const repo = issueRepo || context.repo.repo;
673+
const commitLink = (sha) =>
674+
sha
675+
? `[${sha.slice(0, 7)}](https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${sha})`
676+
: null;
621677
622678
// Fail explicitly if cross-repo commenting was requested but token is missing
623679
if (issueOwner && !process.env.CROSS_REPO_TOKEN) {
@@ -651,9 +707,15 @@ jobs:
651707
process.env.PREVIEW_URL
652708
? `Preview URL: ${process.env.PREVIEW_URL}`
653709
: "Preview URL will appear in Railway after the deploy finishes.",
710+
deployedSha
711+
? `Deployed commit: ${commitLink(deployedSha)}`
712+
: null,
713+
headSha && headSha !== deployedSha
714+
? `PR head commit: ${commitLink(headSha)}`
715+
: null,
654716
`Backend target: ${process.env.BACKEND_MODE}.`,
655717
"Access is employee-only in non-production environments.",
656-
];
718+
].filter(Boolean);
657719
const body = bodyLines.join("\n");
658720
659721
const comments = await github.paginate(github.rest.issues.listComments, {

cli/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
22
"name": "@mcpjam/cli",
3-
"version": "2.1.0",
3+
"version": "3.0.0",
44
"description": "Test, debug, and validate MCP servers — health checks, OAuth conformance, tool-surface diffing, and structured triage from the terminal or CI",
5+
"type": "module",
56
"main": "dist/index.js",
67
"files": [
78
"dist"
@@ -15,7 +16,7 @@
1516
"typecheck": "tsc --noEmit"
1617
},
1718
"dependencies": {
18-
"@mcpjam/sdk": "^0.10.0",
19+
"@mcpjam/sdk": "^1.0.0",
1920
"commander": "^12.1.0"
2021
},
2122
"devDependencies": {
@@ -36,6 +37,6 @@
3637
"ci"
3738
],
3839
"engines": {
39-
"node": ">=18.0.0"
40+
"node": ">=20.0.0"
4041
}
4142
}

cli/src/commands/apps.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@ import {
77
type MCPAppsCheckId,
88
type MCPAppsConformanceConfig,
99
} from "@mcpjam/sdk";
10-
import { buildChatGptWidgetContent, buildMcpWidgetContent } from "../lib/apps";
11-
import { withEphemeralManager } from "../lib/ephemeral";
12-
import { createCliRpcLogCollector } from "../lib/rpc-logs";
13-
import { withRpcLogsIfRequested } from "../lib/rpc-helpers";
10+
import {
11+
buildChatGptWidgetContent,
12+
buildMcpWidgetContent,
13+
} from "../lib/apps.js";
14+
import { withEphemeralManager } from "../lib/ephemeral.js";
15+
import { createCliRpcLogCollector } from "../lib/rpc-logs.js";
16+
import { withRpcLogsIfRequested } from "../lib/rpc-helpers.js";
1417
import {
1518
addRetryOptions,
1619
addSharedServerOptions,
@@ -21,8 +24,12 @@ import {
2124
parseServerConfig,
2225
resolveAliasedStringOption,
2326
type SharedServerTargetOptions,
24-
} from "../lib/server-config";
25-
import { setProcessExitCode, usageError, writeResult } from "../lib/output";
27+
} from "../lib/server-config.js";
28+
import {
29+
setProcessExitCode,
30+
usageError,
31+
writeResult,
32+
} from "../lib/output.js";
2633

2734
const APPS_CHECK_IDS_BY_CATEGORY: Record<
2835
MCPAppsCheckCategory,

cli/src/commands/conformance.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ import { Command } from "commander";
88
import {
99
parseHeadersOption,
1010
parsePositiveInteger,
11-
} from "../lib/server-config";
11+
} from "../lib/server-config.js";
1212
import {
1313
resolveOutputFormat,
1414
setProcessExitCode,
1515
usageError,
1616
writeResult,
1717
type OutputFormat,
18-
} from "../lib/output";
18+
} from "../lib/output.js";
1919

2020
export interface ProtocolConformanceOptions {
2121
url: string;

cli/src/commands/oauth.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,33 +13,33 @@ import { Command } from "commander";
1313
import {
1414
parseHeadersOption,
1515
parsePositiveInteger,
16-
} from "../lib/server-config";
16+
} from "../lib/server-config.js";
1717
import {
1818
VALID_PROTOCOL_VERSIONS,
1919
VALID_REGISTRATION_STRATEGIES,
2020
VALID_AUTH_MODES,
21-
} from "../lib/oauth-enums";
21+
} from "../lib/oauth-enums.js";
2222
import {
2323
cliError,
2424
setProcessExitCode,
2525
usageError,
2626
writeResult,
27-
} from "../lib/output";
28-
import { loadSuiteConfig } from "../lib/config-file";
27+
} from "../lib/output.js";
28+
import { loadSuiteConfig } from "../lib/config-file.js";
2929
import {
3030
renderOAuthConformanceResult,
3131
renderOAuthConformanceSuiteResult,
3232
resolveOAuthOutputFormat,
3333
type OAuthOutputFormat,
34-
} from "../lib/oauth-output";
34+
} from "../lib/oauth-output.js";
3535
import {
3636
buildCommandArtifactError,
3737
writeCommandDebugArtifact,
38-
} from "../lib/debug-artifact";
38+
} from "../lib/debug-artifact.js";
3939
import {
4040
createCliRpcLogCollector,
41-
} from "../lib/rpc-logs";
42-
import { summarizeServerDoctorTarget } from "../lib/server-doctor";
41+
} from "../lib/rpc-logs.js";
42+
import { summarizeServerDoctorTarget } from "../lib/server-doctor.js";
4343
import type { MCPServerConfig, OAuthLoginResult } from "@mcpjam/sdk";
4444

4545
const DYNAMIC_CLIENT_ID_PLACEHOLDER = "__dynamic_registration_client__";

cli/src/commands/prompts.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Command } from "commander";
22
import { listPrompts, getPrompt } from "@mcpjam/sdk";
3-
import { withEphemeralManager } from "../lib/ephemeral";
4-
import { createCliRpcLogCollector } from "../lib/rpc-logs";
5-
import { withRpcLogsIfRequested } from "../lib/rpc-helpers";
3+
import { withEphemeralManager } from "../lib/ephemeral.js";
4+
import { createCliRpcLogCollector } from "../lib/rpc-logs.js";
5+
import { withRpcLogsIfRequested } from "../lib/rpc-helpers.js";
66
import {
77
addRetryOptions,
88
addSharedServerOptions,
@@ -12,8 +12,8 @@ import {
1212
parseRetryPolicy,
1313
parseServerConfig,
1414
resolveAliasedStringOption,
15-
} from "../lib/server-config";
16-
import { writeResult } from "../lib/output";
15+
} from "../lib/server-config.js";
16+
import { writeResult } from "../lib/output.js";
1717

1818
export function registerPromptCommands(program: Command): void {
1919
const prompts = program

cli/src/commands/resources.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Command } from "commander";
22
import { listResources, readResource } from "@mcpjam/sdk";
3-
import { withEphemeralManager } from "../lib/ephemeral";
4-
import { createCliRpcLogCollector } from "../lib/rpc-logs";
5-
import { withRpcLogsIfRequested } from "../lib/rpc-helpers";
3+
import { withEphemeralManager } from "../lib/ephemeral.js";
4+
import { createCliRpcLogCollector } from "../lib/rpc-logs.js";
5+
import { withRpcLogsIfRequested } from "../lib/rpc-helpers.js";
66
import {
77
addRetryOptions,
88
addSharedServerOptions,
@@ -11,8 +11,8 @@ import {
1111
parseRetryPolicy,
1212
parseServerConfig,
1313
resolveAliasedStringOption,
14-
} from "../lib/server-config";
15-
import { writeResult } from "../lib/output";
14+
} from "../lib/server-config.js";
15+
import { writeResult } from "../lib/output.js";
1616

1717
export function registerResourcesCommands(program: Command): void {
1818
const resources = program

cli/src/commands/server.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ import {
1414
buildCommandArtifactError,
1515
writeCommandDebugArtifact,
1616
writeDebugArtifact,
17-
} from "../lib/debug-artifact";
18-
import { withEphemeralManager } from "../lib/ephemeral";
19-
import { attachCliRpcLogs, createCliRpcLogCollector } from "../lib/rpc-logs";
20-
import { withRpcLogsIfRequested } from "../lib/rpc-helpers";
17+
} from "../lib/debug-artifact.js";
18+
import { withEphemeralManager } from "../lib/ephemeral.js";
19+
import { attachCliRpcLogs, createCliRpcLogCollector } from "../lib/rpc-logs.js";
20+
import { withRpcLogsIfRequested } from "../lib/rpc-helpers.js";
2121
import {
2222
formatServerDoctorHuman,
2323
summarizeServerDoctorTarget,
24-
} from "../lib/server-doctor";
24+
} from "../lib/server-doctor.js";
2525
import {
2626
addRetryOptions,
2727
addSharedServerOptions,
@@ -32,18 +32,18 @@ import {
3232
parseServerConfig,
3333
parsePositiveInteger,
3434
resolveHttpAccessToken,
35-
} from "../lib/server-config";
35+
} from "../lib/server-config.js";
3636
import {
3737
parseReporterFormat,
3838
writeJsonArtifact,
3939
writeReporterResult,
40-
} from "../lib/reporting";
40+
} from "../lib/reporting.js";
4141
import {
4242
operationalError,
4343
setProcessExitCode,
4444
usageError,
4545
writeResult,
46-
} from "../lib/output";
46+
} from "../lib/output.js";
4747

4848
export function registerServerCommands(program: Command): void {
4949
const server = program

0 commit comments

Comments
 (0)