c64bridge 0.8.0 → 0.8.1
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/doc/developer.md +10 -2
- package/mcp/server.json +1 -1
- package/mcp.json +8 -7
- package/package.json +4 -2
- package/scripts/prepare-release.mjs +59 -2
- package/server.json +94 -0
package/doc/developer.md
CHANGED
|
@@ -119,8 +119,16 @@ Environment knobs: `RAG_EMBEDDINGS_DIR`, `RAG_BUILD_ON_START`, `RAG_REINDEX_INTE
|
|
|
119
119
|
|
|
120
120
|
- `./build check` — build + test matrix in one pass
|
|
121
121
|
- `./build changelog` — update CHANGELOG draft
|
|
122
|
-
- `./build release --version <version>` — bump version,
|
|
123
|
-
- Published package ships [`dist/`](../dist/), [`doc/`](../doc/), [`data/`](../data/), [`scripts/`](../scripts/), [`generated/`](../generated/),
|
|
122
|
+
- `./build release --version <version>` — bump version, refresh [`mcp.json`](../mcp.json) and [`server.json`](../server.json), prepend changelog notes
|
|
123
|
+
- Published package ships [`dist/`](../dist/), [`doc/`](../doc/), [`data/`](../data/), [`scripts/`](../scripts/), [`generated/`](../generated/), [`mcp.json`](../mcp.json), and [`server.json`](../server.json)
|
|
124
|
+
|
|
125
|
+
Tagging a release through the GitHub release UI triggers [`.github/workflows/release.yaml`](../.github/workflows/release.yaml), which publishes the npm package and then publishes the same version to the MCP Registry.
|
|
126
|
+
|
|
127
|
+
- Required GitHub secret: `NPM_TOKEN`
|
|
128
|
+
- No dedicated MCP Registry secret is required for the GitHub-driven flow; the workflow uses `mcp-publisher login github-oidc`
|
|
129
|
+
- The release workflow must grant `id-token: write` so GitHub Actions can mint the short-lived OIDC token used by `mcp-publisher`
|
|
130
|
+
- Keep [`package.json`](../package.json) `mcpName` aligned with [`server.json`](../server.json) `name`
|
|
131
|
+
- The root [`server.json`](../server.json) is the MCP Registry manifest; [`mcp/server.json`](../mcp/server.json) remains generated MCP interface output
|
|
124
132
|
|
|
125
133
|
## 9. Troubleshooting Cheatsheet
|
|
126
134
|
|
package/mcp/server.json
CHANGED
package/mcp.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "c64bridge",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "Stdio-based Model Context Protocol (MCP) server that bridges Commodore 64 Ultimate hardware with AI agents.",
|
|
5
5
|
"entry": "dist/index.js",
|
|
6
6
|
"type": "stdio",
|
|
@@ -9,11 +9,14 @@
|
|
|
9
9
|
"mcp-server",
|
|
10
10
|
"model context protocol",
|
|
11
11
|
"openai",
|
|
12
|
-
"
|
|
13
|
-
"commodore64",
|
|
14
|
-
"commodore 64",
|
|
12
|
+
"commodore",
|
|
15
13
|
"c64",
|
|
16
14
|
"c64u",
|
|
15
|
+
"commodore64",
|
|
16
|
+
"commodore 64",
|
|
17
|
+
"commodore 64 ultimate",
|
|
18
|
+
"ultimate64",
|
|
19
|
+
"ultimate 64",
|
|
17
20
|
"sid",
|
|
18
21
|
"basic",
|
|
19
22
|
"assembly",
|
|
@@ -22,9 +25,7 @@
|
|
|
22
25
|
"retrogaming",
|
|
23
26
|
"vintage computing",
|
|
24
27
|
"hardware integration",
|
|
25
|
-
"c64 development"
|
|
26
|
-
"commodore 64 ultimate",
|
|
27
|
-
"ultimate 64"
|
|
28
|
+
"c64 development"
|
|
28
29
|
],
|
|
29
30
|
"env": {
|
|
30
31
|
"LOG_LEVEL": {
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "c64bridge",
|
|
3
|
-
"version": "0.8.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.8.1",
|
|
4
|
+
"mcpName": "io.github.chrisgleissner/c64bridge",
|
|
5
|
+
"description": "C64 Bridge MCP server for Commodore 64 Ultimate hardware and VICE emulator control",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"main": "dist/index.js",
|
|
7
8
|
"packageManager": "bun@1.3.1",
|
|
@@ -79,6 +80,7 @@
|
|
|
79
80
|
},
|
|
80
81
|
"files": [
|
|
81
82
|
"mcp.json",
|
|
83
|
+
"server.json",
|
|
82
84
|
"AGENTS.md",
|
|
83
85
|
"LICENSE",
|
|
84
86
|
"README.md",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { execSync } from 'node:child_process';
|
|
3
|
-
import { readFile, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { access, readFile, writeFile } from 'node:fs/promises';
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import process from 'node:process';
|
|
6
6
|
|
|
@@ -16,6 +16,27 @@ const updateJsonFile = async (relativePath, updater) => {
|
|
|
16
16
|
await writeFile(filePath, JSON.stringify(updated, null, 2) + '\n');
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
+
const fileExists = async (relativePath) => {
|
|
20
|
+
try {
|
|
21
|
+
await access(path.resolve(relativePath));
|
|
22
|
+
return true;
|
|
23
|
+
} catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const getRepositoryMetadata = (repository) => {
|
|
29
|
+
const url = typeof repository === 'string' ? repository : repository?.url;
|
|
30
|
+
if (!url) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
url,
|
|
36
|
+
source: url.includes('github.com') ? 'github' : undefined,
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
|
|
19
40
|
const normaliseVersion = (value) => value.replace(/^v/, '');
|
|
20
41
|
|
|
21
42
|
const isExactVersion = (value) => /^v?\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(value);
|
|
@@ -72,6 +93,42 @@ await updateJsonFile('mcp.json', async (data) => ({
|
|
|
72
93
|
version: newVersion,
|
|
73
94
|
}));
|
|
74
95
|
|
|
96
|
+
if (await fileExists('server.json')) {
|
|
97
|
+
await updateJsonFile('server.json', async (data) => {
|
|
98
|
+
const packages = Array.isArray(data.packages) ? [...data.packages] : [];
|
|
99
|
+
const primaryPackage = packages[0] ?? {
|
|
100
|
+
registryType: 'npm',
|
|
101
|
+
transport: {
|
|
102
|
+
type: 'stdio',
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
packages[0] = {
|
|
107
|
+
...primaryPackage,
|
|
108
|
+
identifier: pkg.name,
|
|
109
|
+
version: newVersion,
|
|
110
|
+
transport: primaryPackage.transport ?? {
|
|
111
|
+
type: 'stdio',
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const repository = getRepositoryMetadata(pkg.repository);
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
...data,
|
|
119
|
+
name: pkg.mcpName ?? data.name,
|
|
120
|
+
version: newVersion,
|
|
121
|
+
repository: repository
|
|
122
|
+
? {
|
|
123
|
+
...(data.repository ?? {}),
|
|
124
|
+
...repository,
|
|
125
|
+
}
|
|
126
|
+
: data.repository,
|
|
127
|
+
packages,
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
75
132
|
// Manifest generation removed (runtime discovery via MCP stdio)
|
|
76
133
|
|
|
77
134
|
// Update CHANGELOG.md from commits since last tag using Conventional Commits subjects.
|
|
@@ -88,4 +145,4 @@ if (skippedVersionBump && hasExistingChangelogEntry) {
|
|
|
88
145
|
}
|
|
89
146
|
|
|
90
147
|
console.log(`Release metadata updated to ${newVersion}.`);
|
|
91
|
-
console.log('Next steps: commit the changes,
|
|
148
|
+
console.log('Next steps: commit and push the changes, then create the release tag from GitHub once main is ready.');
|
package/server.json
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.chrisgleissner/c64bridge",
|
|
4
|
+
"title": "C64 Bridge",
|
|
5
|
+
"description": "MCP server for Commodore 64 Ultimate hardware and VICE emulator control.",
|
|
6
|
+
"repository": {
|
|
7
|
+
"url": "https://github.com/chrisgleissner/c64bridge",
|
|
8
|
+
"source": "github"
|
|
9
|
+
},
|
|
10
|
+
"websiteUrl": "https://github.com/chrisgleissner/c64bridge",
|
|
11
|
+
"version": "0.8.1",
|
|
12
|
+
"packages": [
|
|
13
|
+
{
|
|
14
|
+
"registryType": "npm",
|
|
15
|
+
"identifier": "c64bridge",
|
|
16
|
+
"version": "0.8.1",
|
|
17
|
+
"transport": {
|
|
18
|
+
"type": "stdio"
|
|
19
|
+
},
|
|
20
|
+
"environmentVariables": [
|
|
21
|
+
{
|
|
22
|
+
"name": "LOG_LEVEL",
|
|
23
|
+
"description": "Logger verbosity.",
|
|
24
|
+
"format": "string",
|
|
25
|
+
"default": "info",
|
|
26
|
+
"choices": [
|
|
27
|
+
"debug",
|
|
28
|
+
"info",
|
|
29
|
+
"warn",
|
|
30
|
+
"error"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "C64BRIDGE_CONFIG",
|
|
35
|
+
"description": "Path to the C64 Bridge configuration file.",
|
|
36
|
+
"format": "filepath",
|
|
37
|
+
"default": "~/.c64bridge.json"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "C64_MODE",
|
|
41
|
+
"description": "Active backend.",
|
|
42
|
+
"format": "string",
|
|
43
|
+
"default": "c64u",
|
|
44
|
+
"choices": [
|
|
45
|
+
"c64u",
|
|
46
|
+
"vice"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "C64U_HOST",
|
|
51
|
+
"description": "Ultimate 64 host name or IP address.",
|
|
52
|
+
"format": "string",
|
|
53
|
+
"default": "c64u"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "C64U_PORT",
|
|
57
|
+
"description": "Ultimate 64 REST port.",
|
|
58
|
+
"format": "number",
|
|
59
|
+
"default": "80"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "C64U_PASSWORD",
|
|
63
|
+
"description": "Ultimate 64 network password sent as X-Password.",
|
|
64
|
+
"format": "string",
|
|
65
|
+
"isSecret": true
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "VICE_BINARY",
|
|
69
|
+
"description": "VICE emulator binary to launch.",
|
|
70
|
+
"format": "string",
|
|
71
|
+
"default": "x64sc"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "VICE_VISIBLE",
|
|
75
|
+
"description": "Launch VICE with a visible window when possible.",
|
|
76
|
+
"format": "boolean",
|
|
77
|
+
"default": "true"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "VICE_WARP",
|
|
81
|
+
"description": "Enable VICE warp mode.",
|
|
82
|
+
"format": "boolean",
|
|
83
|
+
"default": "false"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "GITHUB_TOKEN",
|
|
87
|
+
"description": "GitHub token for optional RAG discovery against GitHub.",
|
|
88
|
+
"format": "string",
|
|
89
|
+
"isSecret": true
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|