Skip to content

Commit adcc521

Browse files
committed
Rename dxt (Desktop Extensions) to mcpb (MCP Bundle)
.dxt extension becomes .mcpb The manifest.json schema deprecates dxt_version
1 parent 3b558a9 commit adcc521

File tree

17 files changed

+69
-72
lines changed

17 files changed

+69
-72
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
node_modules/
66

77
# Desktop extensions
8-
src/main/assets/dxt
8+
src/main/assets/mcpb
99

1010
# Log files
1111
*.log

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ Review our [Security Policy](SECURITY.md). Do not file a public issue for securi
193193

194194
![](https://gcore.jsdelivr.net/gh/AI-QL/.github/public/tuui2/1_primitive.jpg)
195195

196-
### Desktop extensions (.dxt) support
196+
### MCP bundles (.mcpb) support
197197

198198
![](https://gcore.jsdelivr.net/gh/AI-QL/.github/public/tuui2/2_dxt.jpg)
199199

eslint.config.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export default defineConfig([
2121
'buildAssets/icons/',
2222
'**/dist/',
2323
'**/release/',
24-
'**/dxt/',
24+
'**/mcpb/',
2525
'**/.idea/',
2626
'**/.vscode/',
2727
'**/.github/'

package-lock.json

Lines changed: 20 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
"node": ">=22.12.0"
4444
},
4545
"dependencies": {
46-
"@anthropic-ai/dxt": "^0.2.6",
46+
"@anthropic-ai/mcpb": "^1.1.0",
4747
"@el3um4s/run-vbs": "^1.1.2",
4848
"@fontsource/inter": "^5.2.6",
4949
"@mdi/font": "^7.4.47",

src/main/IPCs.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { disconnect } from './mcp/connection'
2020
import { loadConfig } from './mcp/init'
2121
import { loadLlmFile } from './mcp/config'
2222
import { unpackDxt, getManifest } from './mcp/dxt'
23-
import { DxtManifest } from '@anthropic-ai/dxt'
23+
import { McpbManifest } from '@anthropic-ai/mcpb'
2424

2525
import { closeCommandPicker } from './aid/commands'
2626

@@ -31,7 +31,7 @@ const handlerRegistry = new Map<string, Function>()
3131

3232
interface ManifestResponse {
3333
status: 'success' | 'error'
34-
result?: Record<string, DxtManifest> // Object with string keys and DXT values
34+
result?: Record<string, McpbManifest> // Object with string keys and DXT values
3535
error?: string
3636
}
3737

@@ -53,7 +53,7 @@ export default class IPCs {
5353
})
5454

5555
ipcMain.handle('msgRequestGetDxtUrl', () => {
56-
return pathToFileURL(normalize(resolve(Constants.ASSETS_PATH.dxt))).toString()
56+
return pathToFileURL(normalize(resolve(Constants.ASSETS_PATH.mcpb))).toString()
5757
})
5858

5959
ipcMain.handle('msgMcpServersStop', async () => {
@@ -111,7 +111,7 @@ export default class IPCs {
111111
})
112112

113113
ipcMain.on('msgOpenDxtFilePath', async (event: IpcMainEvent, name: string) => {
114-
shell.openPath(resolve(join(Constants.ASSETS_PATH.dxt, name)))
114+
shell.openPath(resolve(join(Constants.ASSETS_PATH.mcpb, name)))
115115
})
116116

117117
ipcMain.on('msgOpenPath', async (event: IpcMainEvent, name: string) => {
@@ -185,12 +185,12 @@ export default class IPCs {
185185
try {
186186
const buffer = Buffer.from(data)
187187
const saveOption = Constants.getDxtSource(name)
188-
const filePath = saveOption.dxtPath
188+
const filePath = saveOption.mcpbPath
189189
const dirPath = saveOption.outputDir
190190
if (!existsSync(dirPath)) {
191191
mkdirSync(dirPath, { recursive: true })
192192
}
193-
console.log('DXT to be saved in: ', filePath)
193+
console.log('MCP bundle to be saved in: ', filePath)
194194

195195
writeFileSync(filePath, buffer, { encoding: null })
196196

@@ -211,18 +211,18 @@ export default class IPCs {
211211
})
212212

213213
ipcMain.handle('list-manifests', async (_event: IpcMainEvent): Promise<ManifestResponse> => {
214-
const dxtPath = Constants.ASSETS_PATH.dxt
214+
const mcpbPath = Constants.ASSETS_PATH.mcpb
215215

216216
try {
217-
const entries = readdirSync(dxtPath, { withFileTypes: true })
217+
const entries = readdirSync(mcpbPath, { withFileTypes: true })
218218
console.log(entries)
219219

220220
// Transform the array into an object
221221
const manifestsObject = entries
222222
.filter((dirent) => dirent.isDirectory())
223223
.reduce(
224224
(acc, dirent) => {
225-
acc[dirent.name] = getManifest(join(dxtPath, dirent.name))
225+
acc[dirent.name] = getManifest(join(mcpbPath, dirent.name))
226226
return acc
227227
},
228228
{} as Record<string, any>

src/main/assets/config/startup.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
{
4646
"img": "https://www.anthropic.com/_next/image?url=https%3A%2F%2Fwww-cdn.anthropic.com%2Fimages%2F4zrzovbb%2Fwebsite%2Fd48f3ea1218a4b90450b9ab8134fa0e24db5a167-720x542.png&w=1920&q=75",
4747
"title": "Desktop Extensions",
48-
"subtitle": "Desktop Extensions (.dxt files) solve these problems by bundling an entire MCP server, including all dependencies into a single installable package.",
48+
"subtitle": "Desktop Extensions (.dxt/.mcpb files) solve these problems by bundling an entire MCP server, including all dependencies into a single installable package.",
4949
"duration": "10",
5050
"link": "https://www.anthropic.com/engineering/desktop-extensions"
5151
},

src/main/mcp/dxt.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import {
22
unpackExtension,
33
getMcpConfigForManifest,
4-
DxtManifestSchema,
5-
DxtManifest,
6-
DxtUserConfigValues,
4+
McpbManifestSchema,
5+
McpbManifest,
6+
McpbUserConfigValues,
77
McpServerConfig,
88
Logger
9-
} from '@anthropic-ai/dxt'
9+
} from '@anthropic-ai/mcpb'
1010

1111
import { existsSync, readFileSync, statSync } from 'fs'
1212
import { join, resolve, sep } from 'path'
@@ -18,8 +18,8 @@ const mockSystemDirs = {
1818

1919
export async function getMcpConfigForDxt(
2020
basePath: string,
21-
baseManifest: DxtManifest,
22-
userConfig: DxtUserConfigValues
21+
baseManifest: McpbManifest,
22+
userConfig: McpbUserConfigValues
2323
): Promise<McpServerConfig> {
2424
const logMessages: string[] = []
2525
const logger: Logger = {
@@ -44,13 +44,13 @@ export async function getMcpConfigForDxt(
4444
}
4545
}
4646
export async function unpackDxt(dxtUnpackOption: {
47-
dxtPath: string
47+
mcpbPath: string
4848
outputDir: string
4949
}): Promise<boolean> {
5050
return unpackExtension(dxtUnpackOption)
5151
}
5252

53-
export function getManifest(inputPath: string): false | DxtManifest {
53+
export function getManifest(inputPath: string): false | McpbManifest {
5454
try {
5555
const resolvedPath = resolve(inputPath)
5656
let manifestPath = resolvedPath
@@ -63,7 +63,7 @@ export function getManifest(inputPath: string): false | DxtManifest {
6363
const manifestContent = readFileSync(manifestPath, 'utf-8')
6464
const manifestData = JSON.parse(manifestContent)
6565

66-
const result = DxtManifestSchema.safeParse(manifestData)
66+
const result = McpbManifestSchema.safeParse(manifestData)
6767

6868
if (result.success) {
6969
console.log('Manifest is valid!')

src/main/mcp/init.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ export async function initClients(
3434
const clientPromises = entries.map(async ([name, object]) => {
3535
if (object.type === 'metadata__stdio_config') {
3636
return initSingleClient(name, object.config, callback)
37-
} else if (object.type === 'metadata__dxt_manifest') {
37+
} else if (object.type === 'metadata__mcpb_manifest') {
3838
const stdioConfig = await getMcpConfigForDxt(
39-
Constants.getPosixPath(path.join(Constants.ASSETS_PATH.dxt, name)),
39+
Constants.getPosixPath(path.join(Constants.ASSETS_PATH.mcpb, name)),
4040
object.config,
4141
object.user_config
4242
)

src/main/mcp/types.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
ElicitRequest
1515
} from '@modelcontextprotocol/sdk/types.js'
1616

17-
import { DxtUserConfigValues, DxtManifest } from '@anthropic-ai/dxt'
17+
import { McpbUserConfigValues, McpbManifest } from '@anthropic-ai/mcpb'
1818

1919
import { StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js'
2020

@@ -61,9 +61,9 @@ type McpMetadataStdio = {
6161

6262
type McpMetadataDxt = {
6363
name: string
64-
type: 'metadata__dxt_manifest'
65-
config: DxtManifest
66-
user_config?: DxtUserConfigValues
64+
type: 'metadata__mcpb_manifest'
65+
config: McpbManifest
66+
user_config?: McpbUserConfigValues
6767
}
6868

6969
type CommandRequest = {

0 commit comments

Comments
 (0)