salesforce-metadata-mcp 2.0.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/AGENTFORCE.md +125 -0
- package/APEX_LWC.md +214 -0
- package/CHANGELOG.md +120 -0
- package/README.md +207 -0
- package/SETUP.md +208 -0
- package/TOOLS.md +193 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/index.d.ts +3406 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +992 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/services/deployment.d.ts +36 -0
- package/dist/services/deployment.d.ts.map +1 -0
- package/dist/services/deployment.js +215 -0
- package/dist/services/deployment.js.map +1 -0
- package/dist/services/mcpgen.d.ts +16 -0
- package/dist/services/mcpgen.d.ts.map +1 -0
- package/dist/services/mcpgen.js +229 -0
- package/dist/services/mcpgen.js.map +1 -0
- package/dist/services/salesforce.d.ts +598 -0
- package/dist/services/salesforce.d.ts.map +1 -0
- package/dist/services/salesforce.js +1317 -0
- package/dist/services/salesforce.js.map +1 -0
- package/dist/services/tooling.d.ts +23 -0
- package/dist/services/tooling.d.ts.map +1 -0
- package/dist/services/tooling.js +173 -0
- package/dist/services/tooling.js.map +1 -0
- package/dist/tools/agentforce.d.ts +3 -0
- package/dist/tools/agentforce.d.ts.map +1 -0
- package/dist/tools/agentforce.js +73 -0
- package/dist/tools/agentforce.js.map +1 -0
- package/dist/tools/apex.d.ts +3 -0
- package/dist/tools/apex.d.ts.map +1 -0
- package/dist/tools/apex.js +95 -0
- package/dist/tools/apex.js.map +1 -0
- package/dist/tools/automation.d.ts +3 -0
- package/dist/tools/automation.d.ts.map +1 -0
- package/dist/tools/automation.js +186 -0
- package/dist/tools/automation.js.map +1 -0
- package/dist/tools/deployment.d.ts +3 -0
- package/dist/tools/deployment.d.ts.map +1 -0
- package/dist/tools/deployment.js +89 -0
- package/dist/tools/deployment.js.map +1 -0
- package/dist/tools/experience.d.ts +3 -0
- package/dist/tools/experience.d.ts.map +1 -0
- package/dist/tools/experience.js +53 -0
- package/dist/tools/experience.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +27 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/integrations.d.ts +3 -0
- package/dist/tools/integrations.d.ts.map +1 -0
- package/dist/tools/integrations.js +96 -0
- package/dist/tools/integrations.js.map +1 -0
- package/dist/tools/lwc.d.ts +3 -0
- package/dist/tools/lwc.d.ts.map +1 -0
- package/dist/tools/lwc.js +73 -0
- package/dist/tools/lwc.js.map +1 -0
- package/dist/tools/mcp.d.ts +3 -0
- package/dist/tools/mcp.d.ts.map +1 -0
- package/dist/tools/mcp.js +44 -0
- package/dist/tools/mcp.js.map +1 -0
- package/dist/tools/metadata.d.ts +3 -0
- package/dist/tools/metadata.d.ts.map +1 -0
- package/dist/tools/metadata.js +168 -0
- package/dist/tools/metadata.js.map +1 -0
- package/dist/tools/objects.d.ts +3 -0
- package/dist/tools/objects.d.ts.map +1 -0
- package/dist/tools/objects.js +172 -0
- package/dist/tools/objects.js.map +1 -0
- package/dist/tools/security.d.ts +3 -0
- package/dist/tools/security.d.ts.map +1 -0
- package/dist/tools/security.js +82 -0
- package/dist/tools/security.js.map +1 -0
- package/dist/tools/ui.d.ts +3 -0
- package/dist/tools/ui.d.ts.map +1 -0
- package/dist/tools/ui.js +195 -0
- package/dist/tools/ui.js.map +1 -0
- package/dist/tools/utils.d.ts +15 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +7 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/types.d.ts +85 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { promises as fs } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
// ─── MCP Server Generation ────────────────────────────────────────────────────
|
|
4
|
+
export async function createMcpServer(params) {
|
|
5
|
+
try {
|
|
6
|
+
const dir = params.outputDirectory;
|
|
7
|
+
await fs.mkdir(dir, { recursive: true });
|
|
8
|
+
await fs.mkdir(path.join(dir, "src"), { recursive: true });
|
|
9
|
+
const packageJson = {
|
|
10
|
+
name: params.serverName,
|
|
11
|
+
version: "1.0.0",
|
|
12
|
+
description: params.description ?? `MCP server for ${params.serverName}`,
|
|
13
|
+
type: "module",
|
|
14
|
+
main: "dist/index.js",
|
|
15
|
+
scripts: {
|
|
16
|
+
build: "tsc",
|
|
17
|
+
start: "node dist/index.js",
|
|
18
|
+
dev: "tsc --watch"
|
|
19
|
+
},
|
|
20
|
+
dependencies: {
|
|
21
|
+
"@modelcontextprotocol/sdk": "^1.10.2",
|
|
22
|
+
"axios": "^1.7.9",
|
|
23
|
+
"zod": "^3.23.8"
|
|
24
|
+
},
|
|
25
|
+
devDependencies: {
|
|
26
|
+
"@types/node": "^22.10.0",
|
|
27
|
+
"typescript": "^5.7.2"
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const tsconfig = {
|
|
31
|
+
compilerOptions: {
|
|
32
|
+
target: "ES2022",
|
|
33
|
+
module: "Node16",
|
|
34
|
+
moduleResolution: "Node16",
|
|
35
|
+
outDir: "./dist",
|
|
36
|
+
rootDir: "./src",
|
|
37
|
+
strict: true,
|
|
38
|
+
esModuleInterop: true,
|
|
39
|
+
skipLibCheck: true,
|
|
40
|
+
forceConsistentCasingInFileNames: true,
|
|
41
|
+
declaration: true,
|
|
42
|
+
sourceMap: true
|
|
43
|
+
},
|
|
44
|
+
include: ["src/**/*"],
|
|
45
|
+
exclude: ["node_modules", "dist"]
|
|
46
|
+
};
|
|
47
|
+
const indexTs = `import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
48
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
49
|
+
import { z } from "zod";
|
|
50
|
+
|
|
51
|
+
const server = new McpServer({
|
|
52
|
+
name: "${params.serverName}",
|
|
53
|
+
version: "1.0.0",
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// ─── Tools ────────────────────────────────────────────────────────────────────
|
|
57
|
+
|
|
58
|
+
server.registerTool(
|
|
59
|
+
"hello_world",
|
|
60
|
+
{
|
|
61
|
+
title: "Hello World",
|
|
62
|
+
description: "A sample tool that returns a greeting",
|
|
63
|
+
inputSchema: z.object({
|
|
64
|
+
name: z.string().optional().describe("Name to greet"),
|
|
65
|
+
}),
|
|
66
|
+
},
|
|
67
|
+
async (params) => {
|
|
68
|
+
const greeting = \`Hello, \${params.name ?? "World"}!\`;
|
|
69
|
+
return { content: [{ type: "text", text: greeting }] };
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
// ─── Start server ─────────────────────────────────────────────────────────────
|
|
74
|
+
|
|
75
|
+
async function main(): Promise<void> {
|
|
76
|
+
const transport = new StdioServerTransport();
|
|
77
|
+
await server.connect(transport);
|
|
78
|
+
console.error("${params.serverName} MCP server running on stdio");
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
main().catch((err: unknown) => {
|
|
82
|
+
console.error("Server error:", err);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
});
|
|
85
|
+
`;
|
|
86
|
+
const envExample = `# Salesforce credentials
|
|
87
|
+
SF_INSTANCE_URL=${params.salesforceInstanceUrl ?? "https://your-org.salesforce.com"}
|
|
88
|
+
SF_ACCESS_TOKEN=your_access_token
|
|
89
|
+
# Or use OAuth refresh:
|
|
90
|
+
# SF_CLIENT_ID=your_client_id
|
|
91
|
+
# SF_CLIENT_SECRET=your_client_secret
|
|
92
|
+
# SF_REFRESH_TOKEN=your_refresh_token
|
|
93
|
+
`;
|
|
94
|
+
const readme = `# ${params.serverName}
|
|
95
|
+
|
|
96
|
+
${params.description ?? "A Salesforce MCP Server"}
|
|
97
|
+
|
|
98
|
+
## Setup
|
|
99
|
+
|
|
100
|
+
\`\`\`bash
|
|
101
|
+
npm install
|
|
102
|
+
npm run build
|
|
103
|
+
\`\`\`
|
|
104
|
+
|
|
105
|
+
## Configuration
|
|
106
|
+
|
|
107
|
+
Copy \`.env.example\` to \`.env\` and fill in your credentials.
|
|
108
|
+
|
|
109
|
+
## Running
|
|
110
|
+
|
|
111
|
+
\`\`\`bash
|
|
112
|
+
npm start
|
|
113
|
+
\`\`\`
|
|
114
|
+
|
|
115
|
+
## Adding to Claude
|
|
116
|
+
|
|
117
|
+
\`\`\`json
|
|
118
|
+
{
|
|
119
|
+
"mcpServers": {
|
|
120
|
+
"${params.serverName}": {
|
|
121
|
+
"command": "node",
|
|
122
|
+
"args": ["${path.join(dir, "dist/index.js").replace(/\\/g, "/")}"],
|
|
123
|
+
"env": {
|
|
124
|
+
"SF_INSTANCE_URL": "https://your-org.salesforce.com",
|
|
125
|
+
"SF_ACCESS_TOKEN": "your_token"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
\`\`\`
|
|
131
|
+
`;
|
|
132
|
+
await fs.writeFile(path.join(dir, "package.json"), JSON.stringify(packageJson, null, 2));
|
|
133
|
+
await fs.writeFile(path.join(dir, "tsconfig.json"), JSON.stringify(tsconfig, null, 2));
|
|
134
|
+
await fs.writeFile(path.join(dir, "src/index.ts"), indexTs);
|
|
135
|
+
await fs.writeFile(path.join(dir, ".env.example"), envExample);
|
|
136
|
+
await fs.writeFile(path.join(dir, "README.md"), readme);
|
|
137
|
+
return {
|
|
138
|
+
success: true,
|
|
139
|
+
fullName: params.serverName,
|
|
140
|
+
created: true,
|
|
141
|
+
message: `MCP server project created at: ${dir}\n\nFiles created:\n- package.json\n- tsconfig.json\n- src/index.ts\n- .env.example\n- README.md\n\nNext steps:\n1. cd "${dir}"\n2. npm install\n3. npm run build\n4. Add to Claude config`
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
return { success: false, message: err instanceof Error ? err.message : String(err) };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
export async function createMcpTool(params) {
|
|
149
|
+
try {
|
|
150
|
+
const indexPath = path.join(params.projectDirectory, "src/index.ts");
|
|
151
|
+
let content;
|
|
152
|
+
try {
|
|
153
|
+
content = await fs.readFile(indexPath, "utf-8");
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return { success: false, message: `Could not read ${indexPath}. Make sure the project directory is correct.` };
|
|
157
|
+
}
|
|
158
|
+
const schemaFields = Object.entries(params.inputSchema)
|
|
159
|
+
.map(([k, v]) => {
|
|
160
|
+
const field = v;
|
|
161
|
+
const type = field.type ?? "string";
|
|
162
|
+
const desc = field.description ?? "";
|
|
163
|
+
const zodType = type === "number" ? "z.number()" : type === "boolean" ? "z.boolean()" : "z.string()";
|
|
164
|
+
return ` ${k}: ${zodType}${desc ? `.describe(${JSON.stringify(desc)})` : ""},`;
|
|
165
|
+
})
|
|
166
|
+
.join("\n");
|
|
167
|
+
const toolCode = `
|
|
168
|
+
server.registerTool(
|
|
169
|
+
"${params.toolName}",
|
|
170
|
+
{
|
|
171
|
+
title: "${params.toolName.replace(/_/g, " ").replace(/\b\w/g, l => l.toUpperCase())}",
|
|
172
|
+
description: ${JSON.stringify(params.toolDescription)},
|
|
173
|
+
inputSchema: z.object({
|
|
174
|
+
${schemaFields}
|
|
175
|
+
}),
|
|
176
|
+
},
|
|
177
|
+
async (params) => {
|
|
178
|
+
${params.handlerCode}
|
|
179
|
+
}
|
|
180
|
+
);
|
|
181
|
+
`;
|
|
182
|
+
// Insert before the "Start server" comment or at end of file
|
|
183
|
+
let newContent;
|
|
184
|
+
const insertMarker = "// ─── Start server";
|
|
185
|
+
if (content.includes(insertMarker)) {
|
|
186
|
+
newContent = content.replace(insertMarker, `${toolCode}\n${insertMarker}`);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
newContent = content + "\n" + toolCode;
|
|
190
|
+
}
|
|
191
|
+
await fs.writeFile(indexPath, newContent, "utf-8");
|
|
192
|
+
return {
|
|
193
|
+
success: true,
|
|
194
|
+
fullName: params.toolName,
|
|
195
|
+
created: true,
|
|
196
|
+
message: `Tool '${params.toolName}' added to ${indexPath}. Run 'npm run build' to compile.`
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
return { success: false, message: err instanceof Error ? err.message : String(err) };
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
export async function listMcpTools(projectDirectory) {
|
|
204
|
+
try {
|
|
205
|
+
const indexPath = path.join(projectDirectory, "src/index.ts");
|
|
206
|
+
let content;
|
|
207
|
+
try {
|
|
208
|
+
content = await fs.readFile(indexPath, "utf-8");
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return { success: false, message: `Could not read ${indexPath}.` };
|
|
212
|
+
}
|
|
213
|
+
const toolMatches = [...content.matchAll(/server\.registerTool\(\s*["']([^"']+)["']/g)];
|
|
214
|
+
const tools = toolMatches.map(m => m[1]);
|
|
215
|
+
if (!tools.length) {
|
|
216
|
+
return { success: true, fullName: projectDirectory, created: false, message: "No tools registered in this MCP server project." };
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
success: true,
|
|
220
|
+
fullName: projectDirectory,
|
|
221
|
+
created: false,
|
|
222
|
+
message: `Found ${tools.length} tool(s) in ${indexPath}:\n${tools.map((t, i) => `${i + 1}. ${t}`).join("\n")}`
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
return { success: false, message: err instanceof Error ? err.message : String(err) };
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=mcpgen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpgen.js","sourceRoot":"","sources":["../../src/services/mcpgen.ts"],"names":[],"mappings":"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"}
|