@micropage-sh/mcp 0.1.2 → 0.1.3
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/README.md +11 -0
- package/dist/client/assets.d.ts +26 -8
- package/dist/client/assets.js +54 -116
- package/dist/client/assets.js.map +1 -1
- package/dist/client/auth-provider.d.ts +9 -3
- package/dist/client/auth-provider.js +11 -0
- package/dist/client/auth-provider.js.map +1 -1
- package/dist/client/bearer-auth.d.ts +16 -0
- package/dist/client/bearer-auth.js +24 -0
- package/dist/client/bearer-auth.js.map +1 -0
- package/dist/client/deploy-token.d.ts +6 -0
- package/dist/client/deploy-token.js +10 -4
- package/dist/client/deploy-token.js.map +1 -1
- package/dist/client/errors.d.ts +1 -1
- package/dist/client/errors.js.map +1 -1
- package/dist/client/http.d.ts +4 -0
- package/dist/client/http.js +7 -4
- package/dist/client/http.js.map +1 -1
- package/dist/client/ip.d.ts +12 -0
- package/dist/client/ip.js +93 -0
- package/dist/client/ip.js.map +1 -0
- package/dist/client/session-store.d.ts +3 -2
- package/dist/client/session-store.js +5 -1
- package/dist/client/session-store.js.map +1 -1
- package/dist/client/tier.d.ts +23 -3
- package/dist/client/tier.js +56 -17
- package/dist/client/tier.js.map +1 -1
- package/dist/context.d.ts +43 -7
- package/dist/guards.d.ts +11 -10
- package/dist/guards.js +21 -19
- package/dist/guards.js.map +1 -1
- package/dist/hints.d.ts +46 -0
- package/dist/hints.js +70 -0
- package/dist/hints.js.map +1 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/node/deps.d.ts +26 -0
- package/dist/node/deps.js +51 -0
- package/dist/node/deps.js.map +1 -0
- package/dist/node/host-lookup.d.ts +3 -0
- package/dist/node/host-lookup.js +4 -0
- package/dist/node/host-lookup.js.map +1 -0
- package/dist/node/path-source.d.ts +3 -0
- package/dist/node/path-source.js +28 -0
- package/dist/node/path-source.js.map +1 -0
- package/dist/reference/prompts.d.ts +2 -1
- package/dist/reference/prompts.js +4 -3
- package/dist/reference/prompts.js.map +1 -1
- package/dist/reference.d.ts +1 -1
- package/dist/reference.js +2 -2
- package/dist/reference.js.map +1 -1
- package/dist/server.d.ts +4 -19
- package/dist/server.js +27 -33
- package/dist/server.js.map +1 -1
- package/dist/tools/account.d.ts +1 -0
- package/dist/tools/account.js +8 -8
- package/dist/tools/account.js.map +1 -1
- package/dist/tools/files.d.ts +15 -6
- package/dist/tools/files.js +63 -45
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/forms.js +1 -1
- package/dist/tools/forms.js.map +1 -1
- package/dist/tools/posts.d.ts +2 -3
- package/dist/tools/posts.js +15 -16
- package/dist/tools/posts.js.map +1 -1
- package/dist/tools/projects.js +2 -2
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/shared.d.ts +1 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/shared.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +6 -7
- package/dist/version.js.map +1 -1
- package/package.json +6 -3
package/dist/server.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { CLIENT_CAPABILITIES_META_KEY, McpServer, } from "@modelcontextprotocol/server";
|
|
2
|
-
import {
|
|
3
|
-
import { DeployTokenAuthProvider, readDeployTokenEnv } from "./client/deploy-token.js";
|
|
4
|
-
import { Http } from "./client/http.js";
|
|
5
|
-
import { SessionAuthProvider, sessionFilePath } from "./client/session-store.js";
|
|
6
|
-
import { PlanGate } from "./client/tier.js";
|
|
7
|
-
import { readEnvFlags } from "./guards.js";
|
|
2
|
+
import { STDIO_HINTS } from "./hints.js";
|
|
8
3
|
import { LIST_CACHE_HINTS, registerReference } from "./reference.js";
|
|
9
4
|
import { registerAccountTools } from "./tools/account.js";
|
|
10
5
|
import { registerBuildTools } from "./tools/builds.js";
|
|
@@ -14,42 +9,22 @@ import { registerPostTools } from "./tools/posts.js";
|
|
|
14
9
|
import { registerProjectTools } from "./tools/projects.js";
|
|
15
10
|
import { VERSION } from "./version.js";
|
|
16
11
|
export const SERVER_NAME = "micropage";
|
|
17
|
-
/**
|
|
18
|
-
* Picks where tokens come from: a deploy token when MICROPAGE_DEPLOY_TOKEN and
|
|
19
|
-
* MICROPAGE_DEPLOY_PROJECT are both set (only one set throws), else the CLI
|
|
20
|
-
* session file. The session provider is used even when the file does not
|
|
21
|
-
* exist yet, so a `micropage login` after the server started takes effect
|
|
22
|
-
* without a restart; until then every call fails with NOT_LOGGED_IN.
|
|
23
|
-
*/
|
|
24
|
-
export function createAuthProvider(env, config, options = {}) {
|
|
25
|
-
const shared = {
|
|
26
|
-
config,
|
|
27
|
-
...(options.fetch ? { fetch: options.fetch } : {}),
|
|
28
|
-
...(options.now ? { now: options.now } : {}),
|
|
29
|
-
};
|
|
30
|
-
const deploy = readDeployTokenEnv(env);
|
|
31
|
-
if (deploy)
|
|
32
|
-
return new DeployTokenAuthProvider({ ...shared, ...deploy });
|
|
33
|
-
return new SessionAuthProvider({ ...shared, path: sessionFilePath(env) });
|
|
34
|
-
}
|
|
35
|
-
/** Builds the process-wide deps from the environment. */
|
|
36
|
-
export function createDeps(env = process.env, options = {}) {
|
|
37
|
-
const config = loadConfig(env);
|
|
38
|
-
const auth = createAuthProvider(env, config, options);
|
|
39
|
-
const http = new Http({ config, auth, ...(options.fetch ? { fetch: options.fetch } : {}) });
|
|
40
|
-
const tier = new PlanGate({ http, auth, ...(options.now ? { now: options.now } : {}) });
|
|
41
|
-
return { config, auth, http, tier, flags: readEnvFlags(env) };
|
|
42
|
-
}
|
|
43
12
|
/**
|
|
44
13
|
* Builds one server instance. Transport-agnostic and factory-shaped on
|
|
45
14
|
* purpose: serveStdio calls it once per connection (plus a discarded
|
|
46
|
-
* discovery probe) and a
|
|
15
|
+
* discovery probe) and a remote HTTP entry would call it per request, so all
|
|
47
16
|
* long-lived state (token refresh, caches) lives in `deps`, never here.
|
|
17
|
+
* Nothing reachable from here may import a Node-only module (node:fs,
|
|
18
|
+
* node:os, node:dns, node:net, node:path); tests/architecture.test.ts
|
|
19
|
+
* enforces it. Node-only deps are built in src/node/.
|
|
48
20
|
*/
|
|
49
21
|
export function createServer(ctx, deps) {
|
|
50
22
|
const server = new McpServer({ name: SERVER_NAME, version: VERSION }, { cacheHints: LIST_CACHE_HINTS });
|
|
23
|
+
if (deps.onToolError)
|
|
24
|
+
observeToolErrors(server, deps.onToolError);
|
|
51
25
|
const toolCtx = {
|
|
52
26
|
...deps,
|
|
27
|
+
hints: deps.hints ?? STDIO_HINTS,
|
|
53
28
|
era: ctx.era,
|
|
54
29
|
clientCapabilities: (handlerCtx) => {
|
|
55
30
|
if (ctx.era === "modern") {
|
|
@@ -69,6 +44,25 @@ export function createServer(ctx, deps) {
|
|
|
69
44
|
registerReference(server, toolCtx);
|
|
70
45
|
return server;
|
|
71
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Wraps every tool handler registered after this call so `observe` sees the
|
|
49
|
+
* error it throws; the error still propagates, so the SDK's isError result
|
|
50
|
+
* is unchanged. The SDK reduces a thrown error to its message, and the
|
|
51
|
+
* remote server wants the error code for its logs.
|
|
52
|
+
*/
|
|
53
|
+
function observeToolErrors(server, observe) {
|
|
54
|
+
const register = server.registerTool.bind(server);
|
|
55
|
+
const wrapped = (name, config, cb) => register(name, config, async (...args) => {
|
|
56
|
+
try {
|
|
57
|
+
return await cb(...args);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
observe(name, err);
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
server.registerTool = wrapped;
|
|
65
|
+
}
|
|
72
66
|
export function createServerFactory(deps) {
|
|
73
67
|
return (ctx) => createServer(ctx, deps);
|
|
74
68
|
}
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,SAAS,GAKV,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/account.d.ts
CHANGED
package/dist/tools/account.js
CHANGED
|
@@ -3,14 +3,13 @@ import { RO } from "../annotations.js";
|
|
|
3
3
|
import { isMicropageError } from "../client/errors.js";
|
|
4
4
|
import { eq, inList } from "../client/http.js";
|
|
5
5
|
import { decodeJwtClaims } from "../client/jwt.js";
|
|
6
|
-
import { LOGIN_HINT, SessionAuthProvider } from "../client/session-store.js";
|
|
7
6
|
import { UPGRADE_MESSAGE, isPaidTier } from "../client/tier.js";
|
|
8
7
|
import { assertDeployTokenAllows } from "../guards.js";
|
|
9
8
|
import { structuredResult } from "./shared.js";
|
|
10
9
|
export const WhoamiInput = z.object({}).strict();
|
|
11
10
|
export const WhoamiOutput = z.object({
|
|
12
11
|
logged_in: z.boolean(),
|
|
13
|
-
auth_mode: z.enum(["session", "deploy_token", "none"]),
|
|
12
|
+
auth_mode: z.enum(["session", "deploy_token", "oauth", "none"]),
|
|
14
13
|
user_id: z.string().nullable(),
|
|
15
14
|
email: z.string().nullable(),
|
|
16
15
|
name: z.string().nullable(),
|
|
@@ -29,10 +28,10 @@ export const WhoamiOutput = z.object({
|
|
|
29
28
|
config_path: z.string().nullable().describe("The CLI session file in use (session mode)."),
|
|
30
29
|
note: z.string().nullable().describe("What to tell the user, when something needs their action."),
|
|
31
30
|
});
|
|
32
|
-
const AUTH_FAILURES = new Set(["NOT_LOGGED_IN", "SESSION_EXPIRED", "SESSION_UNREADABLE", "DEPLOY_TOKEN_INVALID"]);
|
|
31
|
+
const AUTH_FAILURES = new Set(["NOT_LOGGED_IN", "SESSION_EXPIRED", "SESSION_UNREADABLE", "DEPLOY_TOKEN_INVALID", "AUTH_EXPIRED"]);
|
|
33
32
|
export async function runWhoami(ctx) {
|
|
34
|
-
assertDeployTokenAllows(ctx.auth, "whoami");
|
|
35
|
-
const configPath = ctx.auth
|
|
33
|
+
assertDeployTokenAllows(ctx.auth, "whoami", undefined, ctx.hints.deployTokenElsewhere);
|
|
34
|
+
const configPath = ctx.auth.sessionPath ?? null;
|
|
36
35
|
const base = {
|
|
37
36
|
logged_in: false,
|
|
38
37
|
auth_mode: ctx.auth.mode,
|
|
@@ -68,7 +67,8 @@ export async function runWhoami(ctx) {
|
|
|
68
67
|
}
|
|
69
68
|
catch (err) {
|
|
70
69
|
if (isMicropageError(err) && AUTH_FAILURES.has(err.code)) {
|
|
71
|
-
|
|
70
|
+
const note = err.code === "AUTH_EXPIRED" ? err.message : ctx.hints.loginInvalid;
|
|
71
|
+
return { ...base, note };
|
|
72
72
|
}
|
|
73
73
|
throw err;
|
|
74
74
|
}
|
|
@@ -109,9 +109,9 @@ export async function runWhoami(ctx) {
|
|
|
109
109
|
export function registerAccountTools(server, ctx) {
|
|
110
110
|
server.registerTool("whoami", {
|
|
111
111
|
title: "Show the micropage account in use",
|
|
112
|
-
description: `Report which micropage account this server acts as: email, plan tier, subscription, and
|
|
112
|
+
description: `Report which micropage account this server acts as: email, plan tier, subscription, and ${ctx.hints.whoamiModes}.
|
|
113
113
|
|
|
114
|
-
Call it first when a micropage tool fails with a login, session or plan error, or when the user asks which account is connected. It never fails for a missing login: it returns logged_in false and a note saying what the user must do (
|
|
114
|
+
Call it first when a micropage tool fails with a login, session or plan error, or when the user asks which account is connected. It never fails for a missing login: it returns logged_in false and a note saying what the user must do (${ctx.hints.whoamiFix}). It does not log in, log out, or change anything.
|
|
115
115
|
|
|
116
116
|
Do not call it before every task; the other tools report login and plan problems themselves.`,
|
|
117
117
|
inputSchema: WhoamiInput,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/tools/account.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/tools/account.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/files.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/server";
|
|
2
2
|
import * as z from "zod";
|
|
3
|
-
import type { FetchLike } from "../client/http.js";
|
|
4
3
|
import type { ToolContext } from "../context.js";
|
|
5
4
|
export declare const AssetSourceInput: z.ZodUnion<readonly [z.ZodObject<{
|
|
6
5
|
path: z.ZodString;
|
|
@@ -9,6 +8,11 @@ export declare const AssetSourceInput: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
9
8
|
}, z.core.$strict>, z.ZodObject<{
|
|
10
9
|
base64: z.ZodString;
|
|
11
10
|
}, z.core.$strict>]>;
|
|
11
|
+
export declare const RemoteAssetSourceInput: z.ZodUnion<readonly [z.ZodObject<{
|
|
12
|
+
url: z.ZodString;
|
|
13
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
14
|
+
base64: z.ZodString;
|
|
15
|
+
}, z.core.$strict>]>;
|
|
12
16
|
export declare const UploadAssetInput: z.ZodObject<{
|
|
13
17
|
project: z.ZodString;
|
|
14
18
|
filename: z.ZodString;
|
|
@@ -20,6 +24,15 @@ export declare const UploadAssetInput: z.ZodObject<{
|
|
|
20
24
|
base64: z.ZodString;
|
|
21
25
|
}, z.core.$strict>]>;
|
|
22
26
|
}, z.core.$strict>;
|
|
27
|
+
export declare const RemoteUploadAssetInput: z.ZodObject<{
|
|
28
|
+
project: z.ZodString;
|
|
29
|
+
filename: z.ZodString;
|
|
30
|
+
source: z.ZodUnion<readonly [z.ZodObject<{
|
|
31
|
+
url: z.ZodString;
|
|
32
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
33
|
+
base64: z.ZodString;
|
|
34
|
+
}, z.core.$strict>]>;
|
|
35
|
+
}, z.core.$strict>;
|
|
23
36
|
declare const UploadAssetOutput: z.ZodObject<{
|
|
24
37
|
filename: z.ZodString;
|
|
25
38
|
markup: z.ZodString;
|
|
@@ -32,11 +45,7 @@ declare const UploadAssetOutput: z.ZodObject<{
|
|
|
32
45
|
content_hash: z.ZodString;
|
|
33
46
|
}, z.core.$strip>;
|
|
34
47
|
export type UploadAssetResult = z.infer<typeof UploadAssetOutput>;
|
|
35
|
-
export
|
|
36
|
-
/** fetch for `{url}` sources. Never the micropage-authenticated client. */
|
|
37
|
-
fetchExternal?: FetchLike;
|
|
38
|
-
}
|
|
39
|
-
export declare function runUploadAsset(ctx: ToolContext, args: z.infer<typeof UploadAssetInput>, deps?: UploadAssetDeps): Promise<UploadAssetResult>;
|
|
48
|
+
export declare function runUploadAsset(ctx: ToolContext, args: z.infer<typeof UploadAssetInput>): Promise<UploadAssetResult>;
|
|
40
49
|
export declare const ListFilesInput: z.ZodObject<{
|
|
41
50
|
project: z.ZodString;
|
|
42
51
|
}, z.core.$strict>;
|
package/dist/tools/files.js
CHANGED
|
@@ -5,7 +5,7 @@ import { MicropageError } from "../client/errors.js";
|
|
|
5
5
|
import { ProjectRef, resolveProject } from "../client/project-ref.js";
|
|
6
6
|
import { gateTool, structuredResult } from "./shared.js";
|
|
7
7
|
const EXTENSIONS = Object.keys(ASSET_MIME_TYPES).join(", ");
|
|
8
|
-
const
|
|
8
|
+
const maxMb = (maxBytes) => maxBytes / (1024 * 1024);
|
|
9
9
|
const AssetFilename = z
|
|
10
10
|
.string()
|
|
11
11
|
.min(1)
|
|
@@ -15,46 +15,46 @@ const AssetFilename = z
|
|
|
15
15
|
// ---------------------------------------------------------------------------
|
|
16
16
|
// upload_asset
|
|
17
17
|
// ---------------------------------------------------------------------------
|
|
18
|
-
|
|
19
|
-
.union([
|
|
20
|
-
z
|
|
21
|
-
.object({
|
|
22
|
-
path: z
|
|
23
|
-
.string()
|
|
24
|
-
.min(1)
|
|
25
|
-
.max(4096)
|
|
26
|
-
.describe("Absolute path to an image file on the machine running this server (local stdio installs only)."),
|
|
27
|
-
})
|
|
28
|
-
.strict(),
|
|
29
|
-
z
|
|
30
|
-
.object({
|
|
31
|
-
url: z
|
|
32
|
-
.string()
|
|
33
|
-
.min(1)
|
|
34
|
-
.max(4096)
|
|
35
|
-
.describe("A public https:// URL of the image. Fetched once, without micropage credentials, with a 20 s timeout."),
|
|
36
|
-
})
|
|
37
|
-
.strict(),
|
|
38
|
-
z
|
|
39
|
-
.object({
|
|
40
|
-
base64: z
|
|
41
|
-
.string()
|
|
42
|
-
.min(1)
|
|
43
|
-
// ~10 MB of bytes is ~13.4 M base64 chars; the decoded size is checked exactly later.
|
|
44
|
-
.max(14_000_000)
|
|
45
|
-
.describe("The image bytes, base64-encoded. A data: URL (data:image/png;base64,...) also works."),
|
|
46
|
-
})
|
|
47
|
-
.strict(),
|
|
48
|
-
])
|
|
49
|
-
.describe(`Where the bytes come from: exactly one of {path}, {url} or {base64}. Max ${MAX_MB} MB. The content must really be ` +
|
|
50
|
-
"the image type the filename's extension says.");
|
|
51
|
-
export const UploadAssetInput = z
|
|
18
|
+
const PathSource = z
|
|
52
19
|
.object({
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
20
|
+
path: z
|
|
21
|
+
.string()
|
|
22
|
+
.min(1)
|
|
23
|
+
.max(4096)
|
|
24
|
+
.describe("Absolute path to an image file on the machine running this server (local stdio installs only)."),
|
|
25
|
+
})
|
|
26
|
+
.strict();
|
|
27
|
+
const UrlSource = z
|
|
28
|
+
.object({
|
|
29
|
+
url: z
|
|
30
|
+
.string()
|
|
31
|
+
.min(1)
|
|
32
|
+
.max(4096)
|
|
33
|
+
.describe("A public https:// URL of the image. Fetched once, without micropage credentials, with a 20 s timeout."),
|
|
34
|
+
})
|
|
35
|
+
.strict();
|
|
36
|
+
const base64Source = (maxBytes) => z
|
|
37
|
+
.object({
|
|
38
|
+
base64: z
|
|
39
|
+
.string()
|
|
40
|
+
.min(1)
|
|
41
|
+
// 4/3 chars per byte, rounded up to a whole million (14 M for 10 MB); the decoded size is checked exactly later.
|
|
42
|
+
.max(Math.ceil((maxBytes * 4) / 3 / 1_000_000) * 1_000_000)
|
|
43
|
+
.describe("The image bytes, base64-encoded. A data: URL (data:image/png;base64,...) also works."),
|
|
56
44
|
})
|
|
57
45
|
.strict();
|
|
46
|
+
const sourceRules = (maxBytes) => `Max ${maxMb(maxBytes)} MB. The content must really be the image type the filename's extension says.`;
|
|
47
|
+
/** With {path}: a server that can read the user's files. */
|
|
48
|
+
const assetSourceInput = (maxBytes) => z
|
|
49
|
+
.union([PathSource, UrlSource, base64Source(maxBytes)])
|
|
50
|
+
.describe(`Where the bytes come from: exactly one of {path}, {url} or {base64}. ${sourceRules(maxBytes)}`);
|
|
51
|
+
/** Without {path}: a hosted server, so the schema never offers what it cannot do. */
|
|
52
|
+
const remoteAssetSourceInput = (maxBytes) => z.union([UrlSource, base64Source(maxBytes)]).describe(`Where the bytes come from: exactly one of {url} or {base64}. ${sourceRules(maxBytes)}`);
|
|
53
|
+
export const AssetSourceInput = assetSourceInput(MAX_ASSET_BYTES);
|
|
54
|
+
export const RemoteAssetSourceInput = remoteAssetSourceInput(MAX_ASSET_BYTES);
|
|
55
|
+
const uploadAssetInput = (source) => z.object({ project: ProjectRef, filename: AssetFilename, source }).strict();
|
|
56
|
+
export const UploadAssetInput = uploadAssetInput(AssetSourceInput);
|
|
57
|
+
export const RemoteUploadAssetInput = uploadAssetInput(RemoteAssetSourceInput);
|
|
58
58
|
const UploadAssetOutput = z.object({
|
|
59
59
|
filename: z.string().describe("Stored name. Reference it in .page markup as `img: <- <filename>`."),
|
|
60
60
|
markup: z.string().describe("Ready-to-use markup line, e.g. `img: <- hero.webp`."),
|
|
@@ -68,12 +68,19 @@ const UploadAssetOutput = z.object({
|
|
|
68
68
|
mime_type: z.string(),
|
|
69
69
|
content_hash: z.string().describe("SHA-256 of the bytes, used for dedupe."),
|
|
70
70
|
});
|
|
71
|
-
export async function runUploadAsset(ctx, args
|
|
71
|
+
export async function runUploadAsset(ctx, args) {
|
|
72
72
|
await gateTool(ctx, "upload_asset");
|
|
73
73
|
// Validated before any network call or file read.
|
|
74
74
|
const filename = validateAssetFilename(args.filename);
|
|
75
75
|
const project = await resolveProject(ctx, args.project);
|
|
76
|
-
const
|
|
76
|
+
const { pathLoader, lookupHost, deniedHosts, fetchExternal, maxBytes } = ctx.uploads;
|
|
77
|
+
const bytes = await loadAssetSource(args.source, {
|
|
78
|
+
lookup: lookupHost,
|
|
79
|
+
maxBytes: maxBytes ?? MAX_ASSET_BYTES,
|
|
80
|
+
...(pathLoader ? { pathLoader } : {}),
|
|
81
|
+
...(deniedHosts ? { deniedHosts } : {}),
|
|
82
|
+
...(fetchExternal ? { fetch: fetchExternal } : {}),
|
|
83
|
+
});
|
|
77
84
|
assertContentMatchesExtension(filename, bytes);
|
|
78
85
|
const result = await uploadAsset(ctx.http, project.id, filename, bytes);
|
|
79
86
|
return {
|
|
@@ -155,23 +162,34 @@ export async function runGetFileUrl(ctx, args) {
|
|
|
155
162
|
}
|
|
156
163
|
// ---------------------------------------------------------------------------
|
|
157
164
|
export function registerFileTools(server, ctx) {
|
|
158
|
-
|
|
165
|
+
const local = ctx.uploads.pathLoader !== undefined;
|
|
166
|
+
const sources = local ? "from a local file path, a public https URL, or base64 bytes" : "from a public https URL or base64 bytes";
|
|
167
|
+
const maxBytes = ctx.uploads.maxBytes ?? MAX_ASSET_BYTES;
|
|
168
|
+
const sourceNote = ctx.hints.uploadSourceNote ? ` ${ctx.hints.uploadSourceNote}` : "";
|
|
169
|
+
const uploadConfig = {
|
|
159
170
|
title: "Upload an image asset",
|
|
160
|
-
description: `Upload one image (${EXTENSIONS}; max ${
|
|
171
|
+
description: `Upload one image (${EXTENSIONS}; max ${maxMb(maxBytes)} MB) to a micropage project's file storage, ${sources}.${sourceNote} Returns the stored filename, the markup to reference it (\`img: <- hero.webp\`) and its URL.
|
|
161
172
|
|
|
162
173
|
Use it BEFORE save_page or upsert_post reference the image: page markup like \`img: <- hero.webp\` and a post's \`hero: hero.webp\` only resolve to files already stored in the project, and a missing name renders no image. Upload each asset once; calling again with identical content is a no-op (deduped: true, same SHA-256 as the CLI uses).
|
|
163
174
|
|
|
164
175
|
Uploading different content under an existing name deletes the old file and stores the new one. A page that is already live keeps pointing at the old file until it is saved and published again, so re-run save_page and publish_build after replacing an image on a live site. Prefer a new filename to avoid that.
|
|
165
176
|
|
|
166
177
|
Do not use it for non-image files (unsupported), for images already hosted elsewhere that markup can reference by full https URL, or to look up existing files (use list_files). Fails with the plan's storage limit when the project is full.`,
|
|
167
|
-
inputSchema: UploadAssetInput,
|
|
168
178
|
outputSchema: UploadAssetOutput,
|
|
169
179
|
annotations: hints(WRITE, { idempotentHint: true, destructiveHint: true }),
|
|
170
|
-
}
|
|
180
|
+
};
|
|
181
|
+
const uploadHandler = async (args) => {
|
|
171
182
|
const result = await runUploadAsset(ctx, args);
|
|
172
183
|
const what = result.deduped ? "Already stored (identical content)" : result.replaced ? "Replaced" : "Uploaded";
|
|
173
184
|
return structuredResult(result, `${what}: ${result.filename}. Reference it as \`${result.markup}\`.`);
|
|
174
|
-
}
|
|
185
|
+
};
|
|
186
|
+
// Two calls rather than a conditional schema so each keeps its inferred argument type.
|
|
187
|
+
if (local) {
|
|
188
|
+
server.registerTool("upload_asset", { ...uploadConfig, inputSchema: uploadAssetInput(assetSourceInput(maxBytes)) }, uploadHandler);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
server.registerTool("upload_asset", { ...uploadConfig, inputSchema: uploadAssetInput(remoteAssetSourceInput(maxBytes)) }, uploadHandler);
|
|
192
|
+
}
|
|
175
193
|
server.registerTool("list_files", {
|
|
176
194
|
title: "List a project's files",
|
|
177
195
|
description: `List the files stored in a micropage project (images uploaded by upload_asset, the editor or the CLI), newest first: filename, type, size, SHA-256 and upload date, plus storage used and the plan's storage limit.
|
package/dist/tools/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,6BAA6B,EAC7B,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,WAAW,EACX,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/forms.js
CHANGED
|
@@ -149,7 +149,7 @@ It returns counts only, never what visitors typed (that is list_submissions, whi
|
|
|
149
149
|
return structuredResult(result, `${result.count} form(s).`);
|
|
150
150
|
});
|
|
151
151
|
// Submissions are personal data typed by strangers; the user opts in.
|
|
152
|
-
if (!ctx.
|
|
152
|
+
if (!ctx.permissions.allowSubmissions)
|
|
153
153
|
return;
|
|
154
154
|
server.registerTool("list_submissions", {
|
|
155
155
|
title: "Read form submissions (personal data)",
|
package/dist/tools/forms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/tools/forms.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/tools/forms.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/posts.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { InputRequiredResult, McpServer, ServerContext } from "@modelcontextprotocol/server";
|
|
2
2
|
import * as z from "zod";
|
|
3
3
|
import type { ToolContext } from "../context.js";
|
|
4
|
-
import { type ConfirmationTokens } from "../guards.js";
|
|
5
4
|
export declare const ListPostsInput: z.ZodObject<{
|
|
6
5
|
project: z.ZodString;
|
|
7
6
|
slug: z.ZodOptional<z.ZodString>;
|
|
@@ -118,7 +117,7 @@ export declare const PreviewPostSendOutput: z.ZodObject<{
|
|
|
118
117
|
expires_in_seconds: z.ZodNumber;
|
|
119
118
|
}, z.core.$strip>;
|
|
120
119
|
export type PreviewPostSendResult = z.infer<typeof PreviewPostSendOutput>;
|
|
121
|
-
export declare function runPreviewPostSend(ctx: ToolContext, args: z.infer<typeof PreviewPostSendInput
|
|
120
|
+
export declare function runPreviewPostSend(ctx: ToolContext, args: z.infer<typeof PreviewPostSendInput>): Promise<PreviewPostSendResult>;
|
|
122
121
|
export declare const PublishPostInput: z.ZodObject<{
|
|
123
122
|
project: z.ZodString;
|
|
124
123
|
slug: z.ZodString;
|
|
@@ -148,7 +147,7 @@ export type PublishPostOutcome = {
|
|
|
148
147
|
kind: "input";
|
|
149
148
|
result: InputRequiredResult;
|
|
150
149
|
};
|
|
151
|
-
export declare function runPublishPost(ctx: ToolContext, args: z.infer<typeof PublishPostInput>, handlerCtx?: ServerContext
|
|
150
|
+
export declare function runPublishPost(ctx: ToolContext, args: z.infer<typeof PublishPostInput>, handlerCtx?: ServerContext): Promise<PublishPostOutcome>;
|
|
152
151
|
export declare const UnpublishPostInput: z.ZodObject<{
|
|
153
152
|
project: z.ZodString;
|
|
154
153
|
slug: z.ZodString;
|
package/dist/tools/posts.js
CHANGED
|
@@ -4,7 +4,7 @@ import { MicropageError } from "../client/errors.js";
|
|
|
4
4
|
import { countActiveSubscribers, deletePost, formNamesById, getPostBySlug, listPosts, postContentFingerprint, postNotFound, postWillEmail, publishPost, resolveHeroUrl, resolveListFormId, slugify, unhostedBodyImages, unpublishPost, upsertPost, } from "../client/posts.js";
|
|
5
5
|
import { getMaxProjectDeployEventId } from "../client/deploy-events.js";
|
|
6
6
|
import { ProjectRef, resolveProject } from "../client/project-ref.js";
|
|
7
|
-
import { DEFAULT_TOKEN_TTL_MS,
|
|
7
|
+
import { DEFAULT_TOKEN_TTL_MS, elicitConfirmation, requireConfirm, requireConfirmationToken } from "../guards.js";
|
|
8
8
|
import { gateTool, structuredResult } from "./shared.js";
|
|
9
9
|
const SlugInput = z
|
|
10
10
|
.string()
|
|
@@ -287,9 +287,6 @@ function sendFacts(project, post) {
|
|
|
287
287
|
};
|
|
288
288
|
}
|
|
289
289
|
const RESEND_WARNING = "This post is already published, so publishing again RE-SENDS the email to everyone on the list and resets its click-through stats.";
|
|
290
|
-
const SEND_DISABLED = "Emailing from the MCP server is turned off. The user can turn it on by adding MICROPAGE_MCP_ALLOW_SEND=1 to this server's env in their MCP client config " +
|
|
291
|
-
"and restarting it, or publish from the micropage editor or with `micropage posts publish`. To publish on the web only, save the post with email: false " +
|
|
292
|
-
"(upsert_post), then call preview_post_send again.";
|
|
293
290
|
async function loadPost(ctx, project, rawSlug) {
|
|
294
291
|
const slug = normaliseSlug(rawSlug);
|
|
295
292
|
const post = await getPostBySlug(ctx.http, project.id, slug);
|
|
@@ -322,7 +319,7 @@ export const PreviewPostSendOutput = z.object({
|
|
|
322
319
|
confirmation_token: z.string().describe("Pass to publish_post. Invalid once the post changes, or after expires_in_seconds."),
|
|
323
320
|
expires_in_seconds: z.number(),
|
|
324
321
|
});
|
|
325
|
-
export async function runPreviewPostSend(ctx, args
|
|
322
|
+
export async function runPreviewPostSend(ctx, args) {
|
|
326
323
|
await gateTool(ctx, "preview_post_send");
|
|
327
324
|
const project = await resolveProject(ctx, args.project);
|
|
328
325
|
const post = await loadPost(ctx, project, args.slug);
|
|
@@ -331,7 +328,8 @@ export async function runPreviewPostSend(ctx, args, tokens = confirmationTokens)
|
|
|
331
328
|
formNamesById(ctx.http, post.form_id ? [post.form_id] : []),
|
|
332
329
|
facts.willEmail ? countActiveSubscribers(ctx.http, post.form_id) : Promise.resolve(0),
|
|
333
330
|
]);
|
|
334
|
-
const
|
|
331
|
+
const sub = await ctx.tier.currentUserId();
|
|
332
|
+
const blocked = facts.willEmail && !ctx.permissions.allowSend;
|
|
335
333
|
return {
|
|
336
334
|
project: projectBrief(project),
|
|
337
335
|
post: {
|
|
@@ -347,10 +345,10 @@ export async function runPreviewPostSend(ctx, args, tokens = confirmationTokens)
|
|
|
347
345
|
recipient_count: recipients,
|
|
348
346
|
already_published: facts.alreadyPublished,
|
|
349
347
|
resend_warning: facts.willEmail && facts.alreadyPublished ? RESEND_WARNING : null,
|
|
350
|
-
send_allowed: ctx.
|
|
348
|
+
send_allowed: ctx.permissions.allowSend,
|
|
351
349
|
publish_allowed: !blocked,
|
|
352
|
-
blocked_reason: blocked ?
|
|
353
|
-
confirmation_token:
|
|
350
|
+
blocked_reason: blocked ? ctx.hints.sendDisabled : null,
|
|
351
|
+
confirmation_token: ctx.confirmationTokens.mint(sub, facts.tokenPayload),
|
|
354
352
|
expires_in_seconds: Math.round(DEFAULT_TOKEN_TTL_MS / 1000),
|
|
355
353
|
};
|
|
356
354
|
}
|
|
@@ -381,15 +379,16 @@ export const PublishPostOutput = z.object({
|
|
|
381
379
|
after_event_id: AfterEventIdOutput,
|
|
382
380
|
note: z.string(),
|
|
383
381
|
});
|
|
384
|
-
export async function runPublishPost(ctx, args, handlerCtx
|
|
382
|
+
export async function runPublishPost(ctx, args, handlerCtx) {
|
|
385
383
|
await gateTool(ctx, "publish_post");
|
|
386
384
|
const project = await resolveProject(ctx, args.project);
|
|
387
385
|
const post = await loadPost(ctx, project, args.slug);
|
|
388
386
|
const facts = sendFacts(project, post);
|
|
389
|
-
if (facts.willEmail && !ctx.
|
|
390
|
-
throw new MicropageError("SEND_DISABLED", `"${post.slug}" is set to email its list when published. ${
|
|
387
|
+
if (facts.willEmail && !ctx.permissions.allowSend) {
|
|
388
|
+
throw new MicropageError("SEND_DISABLED", `"${post.slug}" is set to email its list when published. ${ctx.hints.sendDisabled} Nothing was changed.`);
|
|
391
389
|
}
|
|
392
|
-
|
|
390
|
+
const sub = await ctx.tier.currentUserId();
|
|
391
|
+
requireConfirmationToken(ctx.confirmationTokens, args.confirmation_token, sub, facts.tokenPayload, "preview_post_send");
|
|
393
392
|
if (facts.willEmail && handlerCtx) {
|
|
394
393
|
const [lists, recipients] = await Promise.all([
|
|
395
394
|
formNamesById(ctx.http, [post.form_id]),
|
|
@@ -542,11 +541,11 @@ Images are not uploaded here. For the hero pass an https URL or the filename of
|
|
|
542
541
|
title: "Preview publishing a post",
|
|
543
542
|
description: `Show what publish_post would do for one post, and get the confirmation_token publish_post requires. Call it before every publish and show the user the result.
|
|
544
543
|
|
|
545
|
-
Reports whether publishing emails the newsletter list, the list name, the number of active subscribers it would go to, whether the post is already published (publishing again re-sends the email to the whole list), and whether this server is allowed to send email (
|
|
544
|
+
Reports whether publishing emails the newsletter list, the list name, the number of active subscribers it would go to, whether the post is already published (publishing again re-sends the email to the whole list), and whether this server is allowed to send email (${ctx.hints.sendSwitchName}).
|
|
546
545
|
|
|
547
546
|
The token is tied to the post as it is now: any edit to the post (upsert_post) or to its list invalidates it, and it expires after 15 minutes or when the server restarts. Read-only: nothing is published or sent.`,
|
|
548
547
|
inputSchema: PreviewPostSendInput,
|
|
549
|
-
outputSchema: PreviewPostSendOutput,
|
|
548
|
+
outputSchema: PreviewPostSendOutput.extend({ send_allowed: z.boolean().describe(ctx.hints.sendAllowedField) }),
|
|
550
549
|
annotations: RO,
|
|
551
550
|
}, async (args) => {
|
|
552
551
|
const result = await runPreviewPostSend(ctx, args);
|
|
@@ -561,7 +560,7 @@ The token is tied to the post as it is now: any edit to the post (upsert_post) o
|
|
|
561
560
|
|
|
562
561
|
Needs the confirmation_token from preview_post_send, taken after the post's last change; show the user that preview and get their go-ahead first. A stale or missing token is refused with nothing changed.
|
|
563
562
|
|
|
564
|
-
Posts that would send email are refused unless
|
|
563
|
+
Posts that would send email are refused unless ${ctx.hints.sendEnabledBy}; there is no web-only override, so to publish such a post on the web only, save it with email: false first. When the client supports it the user is also asked to confirm the send directly. ${REBUILD_NOTE} Use unpublish_post to take a post down.`,
|
|
565
564
|
inputSchema: PublishPostInput,
|
|
566
565
|
outputSchema: PublishPostOutput,
|
|
567
566
|
annotations: OUT,
|