@bsv/simple-mcp 0.0.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/LICENSE +21 -0
- package/README.md +76 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +152 -0
- package/dist/prompts/add-feature.d.ts +16 -0
- package/dist/prompts/add-feature.js +40 -0
- package/dist/prompts/debug.d.ts +16 -0
- package/dist/prompts/debug.js +52 -0
- package/dist/prompts/integrate.d.ts +16 -0
- package/dist/prompts/integrate.js +40 -0
- package/dist/resources/api-reference.d.ts +8 -0
- package/dist/resources/api-reference.js +614 -0
- package/dist/resources/gotchas.d.ts +1 -0
- package/dist/resources/gotchas.js +188 -0
- package/dist/resources/integration.d.ts +1 -0
- package/dist/resources/integration.js +181 -0
- package/dist/resources/patterns.d.ts +1 -0
- package/dist/resources/patterns.js +266 -0
- package/dist/tools/credential.d.ts +6 -0
- package/dist/tools/credential.js +125 -0
- package/dist/tools/did.d.ts +1 -0
- package/dist/tools/did.js +166 -0
- package/dist/tools/inscription.d.ts +1 -0
- package/dist/tools/inscription.js +71 -0
- package/dist/tools/messagebox.d.ts +1 -0
- package/dist/tools/messagebox.js +85 -0
- package/dist/tools/payment.d.ts +1 -0
- package/dist/tools/payment.js +100 -0
- package/dist/tools/scaffold.d.ts +1 -0
- package/dist/tools/scaffold.js +81 -0
- package/dist/tools/server-route.d.ts +1 -0
- package/dist/tools/server-route.js +147 -0
- package/dist/tools/token.d.ts +1 -0
- package/dist/tools/token.js +92 -0
- package/dist/tools/wallet.d.ts +1 -0
- package/dist/tools/wallet.js +127 -0
- package/package.json +46 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateServerRoute = generateServerRoute;
|
|
4
|
+
function generateServerRoute(routeType) {
|
|
5
|
+
if (routeType === 'identity-registry') {
|
|
6
|
+
return `\`\`\`typescript
|
|
7
|
+
// app/api/identity-registry/route.ts
|
|
8
|
+
import { createIdentityRegistryHandler } from '@bsv/simple/server'
|
|
9
|
+
const handler = createIdentityRegistryHandler()
|
|
10
|
+
export const GET = handler.GET, POST = handler.POST
|
|
11
|
+
\`\`\`
|
|
12
|
+
|
|
13
|
+
**API endpoints:**
|
|
14
|
+
- \`GET ?action=lookup&query=...\` → \`{ success, results: [{ tag, identityKey }] }\`
|
|
15
|
+
- \`GET ?action=list&identityKey=...\` → \`{ success, tags: [{ tag, createdAt }] }\`
|
|
16
|
+
- \`POST ?action=register\` body: \`{ tag, identityKey }\` → \`{ success, message, tag }\`
|
|
17
|
+
- \`POST ?action=revoke\` body: \`{ tag, identityKey }\` → \`{ success, message, tag }\`
|
|
18
|
+
|
|
19
|
+
**Custom config options:**
|
|
20
|
+
\`\`\`typescript
|
|
21
|
+
createIdentityRegistryHandler({
|
|
22
|
+
validateTag: (tag) => tag.startsWith('@') ? null : 'Must start with @',
|
|
23
|
+
maxTagsPerIdentity: 3
|
|
24
|
+
})
|
|
25
|
+
\`\`\``;
|
|
26
|
+
}
|
|
27
|
+
if (routeType === 'did-resolver') {
|
|
28
|
+
return `\`\`\`typescript
|
|
29
|
+
// app/api/resolve-did/route.ts
|
|
30
|
+
import { createDIDResolverHandler } from '@bsv/simple/server'
|
|
31
|
+
const handler = createDIDResolverHandler()
|
|
32
|
+
export const GET = handler.GET
|
|
33
|
+
\`\`\`
|
|
34
|
+
|
|
35
|
+
**API:** \`GET ?did=did:bsv:<txid>\` → \`DIDResolutionResult\`
|
|
36
|
+
|
|
37
|
+
**Custom config options:**
|
|
38
|
+
\`\`\`typescript
|
|
39
|
+
createDIDResolverHandler({
|
|
40
|
+
resolverUrl: 'https://custom-resolver.com', // nChain Universal Resolver by default
|
|
41
|
+
wocBaseUrl: 'https://api.whatsonchain.com', // WoC fallback
|
|
42
|
+
resolverTimeout: 10000, // ms
|
|
43
|
+
maxHops: 100 // chain-following limit
|
|
44
|
+
})
|
|
45
|
+
\`\`\``;
|
|
46
|
+
}
|
|
47
|
+
if (routeType === 'server-wallet') {
|
|
48
|
+
return `\`\`\`typescript
|
|
49
|
+
// app/api/server-wallet/route.ts
|
|
50
|
+
import { createServerWalletHandler } from '@bsv/simple/server'
|
|
51
|
+
const handler = createServerWalletHandler()
|
|
52
|
+
export const GET = handler.GET, POST = handler.POST
|
|
53
|
+
\`\`\`
|
|
54
|
+
|
|
55
|
+
**API endpoints:**
|
|
56
|
+
- \`GET ?action=create\` → \`{ success, serverIdentityKey, status }\`
|
|
57
|
+
- \`GET ?action=status\` → \`{ success, saved, identityKey }\`
|
|
58
|
+
- \`GET ?action=request&satoshis=1000\` → \`{ success, paymentRequest }\`
|
|
59
|
+
- \`GET ?action=balance\` → \`{ success, totalOutputs, totalSatoshis }\`
|
|
60
|
+
- \`GET ?action=outputs\` → \`{ success, outputs }\`
|
|
61
|
+
- \`GET ?action=reset\` → \`{ success, message }\`
|
|
62
|
+
- \`POST ?action=receive\` body: \`{ tx, senderIdentityKey, derivationPrefix, derivationSuffix, outputIndex }\`
|
|
63
|
+
|
|
64
|
+
**Custom config options:**
|
|
65
|
+
\`\`\`typescript
|
|
66
|
+
createServerWalletHandler({
|
|
67
|
+
envVar: 'SERVER_PRIVATE_KEY', // env var name
|
|
68
|
+
keyFile: '.server-wallet.json', // file persistence
|
|
69
|
+
network: 'main',
|
|
70
|
+
defaultRequestSatoshis: 1000,
|
|
71
|
+
requestMemo: 'Payment to server'
|
|
72
|
+
})
|
|
73
|
+
\`\`\`
|
|
74
|
+
|
|
75
|
+
Key persistence order: env var → file → auto-generate via \`generatePrivateKey()\`. No \`@bsv/sdk\` import needed.`;
|
|
76
|
+
}
|
|
77
|
+
if (routeType === 'credential-issuer') {
|
|
78
|
+
return `\`\`\`typescript
|
|
79
|
+
// app/api/credential-issuer/route.ts (no [[...path]] catch-all needed!)
|
|
80
|
+
import { createCredentialIssuerHandler } from '@bsv/simple/server'
|
|
81
|
+
const handler = createCredentialIssuerHandler({
|
|
82
|
+
schemas: [{
|
|
83
|
+
id: 'my-credential',
|
|
84
|
+
name: 'MyCredential',
|
|
85
|
+
fields: [
|
|
86
|
+
{ key: 'name', label: 'Full Name', type: 'text', required: true },
|
|
87
|
+
{ key: 'email', label: 'Email', type: 'email' },
|
|
88
|
+
]
|
|
89
|
+
}]
|
|
90
|
+
})
|
|
91
|
+
export const GET = handler.GET, POST = handler.POST
|
|
92
|
+
\`\`\`
|
|
93
|
+
|
|
94
|
+
**API endpoints:**
|
|
95
|
+
- \`GET ?action=info\` → \`{ certifierPublicKey, certificateType, schemas }\`
|
|
96
|
+
- \`GET ?action=schema&id=...\` → schema details
|
|
97
|
+
- \`GET ?action=status&serialNumber=...\` → revocation status
|
|
98
|
+
- \`POST ?action=certify\` body: \`{ identityKey, schemaId, fields }\` → CertificateData
|
|
99
|
+
- \`POST ?action=issue\` body: \`{ subjectKey, schemaId, fields }\` → \`{ credential }\`
|
|
100
|
+
- \`POST ?action=verify\` body: \`{ credential }\` → \`{ verification }\`
|
|
101
|
+
- \`POST ?action=revoke\` body: \`{ serialNumber }\` → \`{ txid }\`
|
|
102
|
+
|
|
103
|
+
**Custom config options:**
|
|
104
|
+
\`\`\`typescript
|
|
105
|
+
createCredentialIssuerHandler({
|
|
106
|
+
schemas: [schemaConfig],
|
|
107
|
+
envVar: 'CREDENTIAL_ISSUER_KEY', // env var for private key
|
|
108
|
+
keyFile: '.credential-issuer-key.json', // file persistence
|
|
109
|
+
revocationStorePath: '.revocation-secrets.json'
|
|
110
|
+
})
|
|
111
|
+
\`\`\``;
|
|
112
|
+
}
|
|
113
|
+
// Default: show all routes
|
|
114
|
+
return `## All Server API Routes (Handler Factories)
|
|
115
|
+
|
|
116
|
+
No boilerplate needed. No \`@bsv/sdk\` import. Each is 3 lines:
|
|
117
|
+
|
|
118
|
+
\`\`\`typescript
|
|
119
|
+
// app/api/identity-registry/route.ts
|
|
120
|
+
import { createIdentityRegistryHandler } from '@bsv/simple/server'
|
|
121
|
+
const handler = createIdentityRegistryHandler()
|
|
122
|
+
export const GET = handler.GET, POST = handler.POST
|
|
123
|
+
\`\`\`
|
|
124
|
+
|
|
125
|
+
\`\`\`typescript
|
|
126
|
+
// app/api/resolve-did/route.ts
|
|
127
|
+
import { createDIDResolverHandler } from '@bsv/simple/server'
|
|
128
|
+
const handler = createDIDResolverHandler()
|
|
129
|
+
export const GET = handler.GET
|
|
130
|
+
\`\`\`
|
|
131
|
+
|
|
132
|
+
\`\`\`typescript
|
|
133
|
+
// app/api/server-wallet/route.ts
|
|
134
|
+
import { createServerWalletHandler } from '@bsv/simple/server'
|
|
135
|
+
const handler = createServerWalletHandler()
|
|
136
|
+
export const GET = handler.GET, POST = handler.POST
|
|
137
|
+
\`\`\`
|
|
138
|
+
|
|
139
|
+
\`\`\`typescript
|
|
140
|
+
// app/api/credential-issuer/route.ts (no [[...path]] needed!)
|
|
141
|
+
import { createCredentialIssuerHandler } from '@bsv/simple/server'
|
|
142
|
+
const handler = createCredentialIssuerHandler({
|
|
143
|
+
schemas: [{ id: 'my-cred', name: 'MyCred', fields: [{ key: 'name', label: 'Name', type: 'text', required: true }] }]
|
|
144
|
+
})
|
|
145
|
+
export const GET = handler.GET, POST = handler.POST
|
|
146
|
+
\`\`\``;
|
|
147
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateTokenHandler(operations: string[]): string;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateTokenHandler = generateTokenHandler;
|
|
4
|
+
function generateTokenHandler(operations) {
|
|
5
|
+
const sections = [];
|
|
6
|
+
if (operations.includes('create')) {
|
|
7
|
+
sections.push(`### Create Token
|
|
8
|
+
\`\`\`typescript
|
|
9
|
+
async function createToken(wallet: BrowserWallet, data: any, basket = 'my-tokens') {
|
|
10
|
+
const result = await wallet.createToken({
|
|
11
|
+
data,
|
|
12
|
+
basket,
|
|
13
|
+
satoshis: 1
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
console.log('Token created:', result.txid)
|
|
17
|
+
console.log('Basket:', result.basket, '| Encrypted:', result.encrypted)
|
|
18
|
+
return result
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Usage:
|
|
22
|
+
// await createToken(wallet, { type: 'loyalty', points: 100 })
|
|
23
|
+
\`\`\``);
|
|
24
|
+
}
|
|
25
|
+
if (operations.includes('list')) {
|
|
26
|
+
sections.push(`### List Tokens
|
|
27
|
+
\`\`\`typescript
|
|
28
|
+
async function listTokens(wallet: BrowserWallet, basket = 'my-tokens') {
|
|
29
|
+
const tokens = await wallet.listTokenDetails(basket)
|
|
30
|
+
|
|
31
|
+
for (const token of tokens) {
|
|
32
|
+
console.log(\`[\${token.outpoint}] \${token.satoshis} sats\`, token.data)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return tokens
|
|
36
|
+
}
|
|
37
|
+
\`\`\``);
|
|
38
|
+
}
|
|
39
|
+
if (operations.includes('send')) {
|
|
40
|
+
sections.push(`### Send Token
|
|
41
|
+
\`\`\`typescript
|
|
42
|
+
async function sendToken(
|
|
43
|
+
wallet: BrowserWallet,
|
|
44
|
+
basket: string,
|
|
45
|
+
outpoint: string,
|
|
46
|
+
recipientKey: string
|
|
47
|
+
) {
|
|
48
|
+
const result = await wallet.sendToken({ basket, outpoint, to: recipientKey })
|
|
49
|
+
console.log('Token sent:', result.txid)
|
|
50
|
+
return result
|
|
51
|
+
}
|
|
52
|
+
\`\`\``);
|
|
53
|
+
}
|
|
54
|
+
if (operations.includes('redeem')) {
|
|
55
|
+
sections.push(`### Redeem Token
|
|
56
|
+
\`\`\`typescript
|
|
57
|
+
async function redeemToken(wallet: BrowserWallet, basket: string, outpoint: string) {
|
|
58
|
+
const result = await wallet.redeemToken({ basket, outpoint })
|
|
59
|
+
console.log('Token redeemed:', result.txid)
|
|
60
|
+
return result
|
|
61
|
+
}
|
|
62
|
+
\`\`\``);
|
|
63
|
+
}
|
|
64
|
+
if (operations.includes('messagebox')) {
|
|
65
|
+
sections.push(`### Send Token via MessageBox
|
|
66
|
+
\`\`\`typescript
|
|
67
|
+
async function sendTokenViaMessageBox(
|
|
68
|
+
wallet: BrowserWallet,
|
|
69
|
+
basket: string,
|
|
70
|
+
outpoint: string,
|
|
71
|
+
recipientKey: string
|
|
72
|
+
) {
|
|
73
|
+
const result = await wallet.sendTokenViaMessageBox({ basket, outpoint, to: recipientKey })
|
|
74
|
+
console.log('Token sent via MessageBox:', result.txid)
|
|
75
|
+
return result
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async function receiveTokens(wallet: BrowserWallet, targetBasket = 'received-tokens') {
|
|
79
|
+
const incoming = await wallet.listIncomingTokens()
|
|
80
|
+
console.log(\`\${incoming.length} incoming tokens\`)
|
|
81
|
+
|
|
82
|
+
for (const token of incoming) {
|
|
83
|
+
const accepted = await wallet.acceptIncomingToken(token, targetBasket)
|
|
84
|
+
console.log('Accepted token from:', accepted.sender)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return incoming.length
|
|
88
|
+
}
|
|
89
|
+
\`\`\``);
|
|
90
|
+
}
|
|
91
|
+
return sections.join('\n\n');
|
|
92
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateWalletSetup(target: string, framework: string): string;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateWalletSetup = generateWalletSetup;
|
|
4
|
+
function generateWalletSetup(target, framework) {
|
|
5
|
+
if (target === 'browser') {
|
|
6
|
+
if (framework === 'nextjs') {
|
|
7
|
+
return `\`\`\`typescript
|
|
8
|
+
'use client'
|
|
9
|
+
import { useState } from 'react'
|
|
10
|
+
import { createWallet, type BrowserWallet } from '@bsv/simple/browser'
|
|
11
|
+
|
|
12
|
+
export default function WalletProvider({ children }: { children: React.ReactNode }) {
|
|
13
|
+
const [wallet, setWallet] = useState<BrowserWallet | null>(null)
|
|
14
|
+
const [error, setError] = useState<string | null>(null)
|
|
15
|
+
|
|
16
|
+
const connect = async () => {
|
|
17
|
+
try {
|
|
18
|
+
setError(null)
|
|
19
|
+
const w = await createWallet()
|
|
20
|
+
setWallet(w)
|
|
21
|
+
} catch (e) {
|
|
22
|
+
setError((e as Error).message)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (!wallet) {
|
|
27
|
+
return (
|
|
28
|
+
<div>
|
|
29
|
+
<button onClick={connect}>Connect Wallet</button>
|
|
30
|
+
{error && <p style={{ color: 'red' }}>{error}</p>}
|
|
31
|
+
</div>
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<div>
|
|
37
|
+
<p>Connected: {wallet.getIdentityKey().substring(0, 20)}...</p>
|
|
38
|
+
<p>Address: {wallet.getAddress()}</p>
|
|
39
|
+
{children}
|
|
40
|
+
</div>
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
\`\`\``;
|
|
44
|
+
}
|
|
45
|
+
if (framework === 'react') {
|
|
46
|
+
return `\`\`\`typescript
|
|
47
|
+
import { useState, useEffect } from 'react'
|
|
48
|
+
import { createWallet, type BrowserWallet } from '@bsv/simple/browser'
|
|
49
|
+
|
|
50
|
+
export function useWallet() {
|
|
51
|
+
const [wallet, setWallet] = useState<BrowserWallet | null>(null)
|
|
52
|
+
const [loading, setLoading] = useState(false)
|
|
53
|
+
const [error, setError] = useState<string | null>(null)
|
|
54
|
+
|
|
55
|
+
const connect = async () => {
|
|
56
|
+
try {
|
|
57
|
+
setLoading(true)
|
|
58
|
+
setError(null)
|
|
59
|
+
const w = await createWallet()
|
|
60
|
+
setWallet(w)
|
|
61
|
+
} catch (e) {
|
|
62
|
+
setError((e as Error).message)
|
|
63
|
+
} finally {
|
|
64
|
+
setLoading(false)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return { wallet, loading, error, connect }
|
|
69
|
+
}
|
|
70
|
+
\`\`\``;
|
|
71
|
+
}
|
|
72
|
+
return `\`\`\`typescript
|
|
73
|
+
import { createWallet } from '@bsv/simple/browser'
|
|
74
|
+
|
|
75
|
+
async function main() {
|
|
76
|
+
const wallet = await createWallet()
|
|
77
|
+
console.log('Connected:', wallet.getIdentityKey())
|
|
78
|
+
console.log('Address:', wallet.getAddress())
|
|
79
|
+
console.log('Status:', wallet.getStatus())
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
main().catch(console.error)
|
|
83
|
+
\`\`\``;
|
|
84
|
+
}
|
|
85
|
+
// Server target
|
|
86
|
+
if (framework === 'nextjs') {
|
|
87
|
+
return `\`\`\`typescript
|
|
88
|
+
// app/api/server-wallet/route.ts — Simplified with handler factory
|
|
89
|
+
import { createServerWalletHandler } from '@bsv/simple/server'
|
|
90
|
+
const handler = createServerWalletHandler()
|
|
91
|
+
export const GET = handler.GET, POST = handler.POST
|
|
92
|
+
\`\`\`
|
|
93
|
+
|
|
94
|
+
Handles lazy-init singleton, key persistence, and all actions automatically.
|
|
95
|
+
|
|
96
|
+
**Key persistence order:**
|
|
97
|
+
1. \`process.env.SERVER_PRIVATE_KEY\` — Environment variable (production)
|
|
98
|
+
2. \`.server-wallet.json\` file — Persisted from previous run (development)
|
|
99
|
+
3. Auto-generated via \`generatePrivateKey()\` — Fresh key (first run)
|
|
100
|
+
|
|
101
|
+
**API endpoints:**
|
|
102
|
+
- \`GET ?action=create\` → server identity key + status
|
|
103
|
+
- \`GET ?action=request&satoshis=1000\` → BRC-29 payment request
|
|
104
|
+
- \`GET ?action=balance\` → output count + total satoshis
|
|
105
|
+
- \`POST ?action=receive\` body: \`{ tx, senderIdentityKey, derivationPrefix, derivationSuffix, outputIndex }\`
|
|
106
|
+
|
|
107
|
+
No \`@bsv/sdk\` import needed. Add \`.server-wallet.json\` to \`.gitignore\`.`;
|
|
108
|
+
}
|
|
109
|
+
return `\`\`\`typescript
|
|
110
|
+
import { ServerWallet, generatePrivateKey } from '@bsv/simple/server'
|
|
111
|
+
|
|
112
|
+
async function main() {
|
|
113
|
+
const privateKey = process.env.SERVER_PRIVATE_KEY || generatePrivateKey()
|
|
114
|
+
|
|
115
|
+
const wallet = await ServerWallet.create({
|
|
116
|
+
privateKey,
|
|
117
|
+
network: 'main',
|
|
118
|
+
storageUrl: 'https://storage.babbage.systems'
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
console.log('Server wallet ready:', wallet.getIdentityKey())
|
|
122
|
+
console.log('Status:', wallet.getStatus())
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
main().catch(console.error)
|
|
126
|
+
\`\`\``;
|
|
127
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bsv/simple-mcp",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "MCP server for @bsv/simple — AI-assisted BSV blockchain development",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"simple-mcp": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"start": "node dist/index.js",
|
|
15
|
+
"dev": "tsc --watch",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"bsv",
|
|
20
|
+
"blockchain",
|
|
21
|
+
"mcp",
|
|
22
|
+
"model-context-protocol",
|
|
23
|
+
"ai",
|
|
24
|
+
"claude",
|
|
25
|
+
"bitcoin"
|
|
26
|
+
],
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "git+https://github.com/bsv-blockchain/simple-mcp.git"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://github.com/bsv-blockchain/simple-mcp#readme",
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/bsv-blockchain/simple-mcp/issues"
|
|
35
|
+
},
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@modelcontextprotocol/sdk": "^1.11.0"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"typescript": "^5.3.0",
|
|
44
|
+
"@types/node": "^20.0.0"
|
|
45
|
+
}
|
|
46
|
+
}
|