discord-ops 0.8.0 → 0.9.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/CHANGELOG.md +10 -0
- package/dist/cli/index.js +29 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/config/schema.d.ts +19 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +7 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/profiles/index.d.ts +23 -0
- package/dist/profiles/index.d.ts.map +1 -0
- package/dist/profiles/index.js +100 -0
- package/dist/profiles/index.js.map +1 -0
- package/dist/security/rate-limiter.d.ts +5 -0
- package/dist/security/rate-limiter.d.ts.map +1 -1
- package/dist/security/rate-limiter.js +8 -0
- package/dist/security/rate-limiter.js.map +1 -1
- package/dist/server.d.ts +18 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +22 -6
- package/dist/server.js.map +1 -1
- package/dist/tools/messaging/get-messages.d.ts.map +1 -1
- package/dist/tools/messaging/get-messages.js +22 -3
- package/dist/tools/messaging/get-messages.js.map +1 -1
- package/dist/transport/http.d.ts +2 -1
- package/dist/transport/http.d.ts.map +1 -1
- package/dist/transport/http.js +15 -2
- package/dist/transport/http.js.map +1 -1
- package/dist/utils/snowflake.d.ts +16 -0
- package/dist/utils/snowflake.d.ts.map +1 -0
- package/dist/utils/snowflake.js +29 -0
- package/dist/utils/snowflake.js.map +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# discord-ops
|
|
2
2
|
|
|
3
|
+
## 0.9.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- dc744af: Slim mode, enhanced health endpoint, and ISO 8601 timestamp support
|
|
8
|
+
- **Tool profiles (`--profile`, `--tools`)**: Load only the tools an agent needs. Four built-in profiles — `monitoring` (6 tools), `readonly` (6), `moderation` (7), `full` (all 45) — slash schema overhead by 85%. Also supports `--tools "t1,t2"` for explicit tool selection. Profile can be set via CLI flags, per-project config, or global config.
|
|
9
|
+
- **Customizable profiles (`tool_profile_add`, `tool_profile_remove`)**: Projects can extend or restrict any base profile via config. Add tools a profile doesn't include, or remove ones you don't need — without defining a fully custom tool list.
|
|
10
|
+
- **Enhanced `/health` endpoint**: Returns uptime, tool profile name, tool count, session count, and rate limiter stats (used/limit/windowMs for both standard and destructive buckets). Designed for Docker healthchecks and monitoring dashboards.
|
|
11
|
+
- **ISO 8601 timestamp support for `get_messages`**: The `before` and `after` parameters now accept ISO 8601 timestamps (e.g. `2025-01-01T00:00:00Z`) in addition to Discord snowflake IDs. Timestamps are automatically converted to snowflakes for reliable time-based message polling.
|
|
12
|
+
|
|
3
13
|
## 0.8.0
|
|
4
14
|
|
|
5
15
|
### Minor Changes
|
package/dist/cli/index.js
CHANGED
|
@@ -39,17 +39,41 @@ async function main() {
|
|
|
39
39
|
}
|
|
40
40
|
// Parse global flags
|
|
41
41
|
const dryRun = args.includes("--dry-run");
|
|
42
|
-
|
|
42
|
+
// Parse --profile flag
|
|
43
|
+
const profileIndex = args.indexOf("--profile");
|
|
44
|
+
const profileArg = profileIndex !== -1 ? args[profileIndex + 1] : undefined;
|
|
45
|
+
// Parse --tools flag (comma-separated)
|
|
46
|
+
const toolsIndex = args.indexOf("--tools");
|
|
47
|
+
const toolsArg = toolsIndex !== -1
|
|
48
|
+
? args[toolsIndex + 1]
|
|
49
|
+
?.split(",")
|
|
50
|
+
.map((t) => t.trim())
|
|
51
|
+
.filter(Boolean)
|
|
52
|
+
: undefined;
|
|
43
53
|
// Configure log level
|
|
44
54
|
const logLevel = process.env.DISCORD_OPS_LOG_LEVEL;
|
|
45
55
|
if (logLevel)
|
|
46
56
|
setLogLevel(logLevel);
|
|
47
57
|
// Load config (does NOT require Discord connection)
|
|
48
58
|
const config = loadConfig();
|
|
59
|
+
// Resolve profile: --tools > --profile > per-project config > global config > "full"
|
|
60
|
+
const resolvedProfile = toolsArg?.length
|
|
61
|
+
? undefined
|
|
62
|
+
: (profileArg ?? config.perProject?.tool_profile ?? config.global.tool_profile ?? "full");
|
|
63
|
+
// Resolve add/remove: per-project overrides global
|
|
64
|
+
const profileAdd = config.perProject?.tool_profile_add ?? config.global.tool_profile_add;
|
|
65
|
+
const profileRemove = config.perProject?.tool_profile_remove ?? config.global.tool_profile_remove;
|
|
66
|
+
const serverOptions = {
|
|
67
|
+
dryRun,
|
|
68
|
+
profile: resolvedProfile,
|
|
69
|
+
tools: toolsArg,
|
|
70
|
+
profileAdd,
|
|
71
|
+
profileRemove,
|
|
72
|
+
};
|
|
49
73
|
// Create lazy Discord client
|
|
50
74
|
const discord = new DiscordClient(config.defaultToken);
|
|
51
75
|
// Create MCP server with tool context
|
|
52
|
-
const server = createServer({ discord, config }, serverOptions);
|
|
76
|
+
const { server, meta } = createServer({ discord, config }, serverOptions);
|
|
53
77
|
// Handle serve subcommand (HTTP/SSE transport)
|
|
54
78
|
if (args[0] === "serve") {
|
|
55
79
|
const portIndex = args.indexOf("--port");
|
|
@@ -58,7 +82,7 @@ async function main() {
|
|
|
58
82
|
console.error("Invalid --port value");
|
|
59
83
|
process.exit(1);
|
|
60
84
|
}
|
|
61
|
-
await startHttpTransport(server, { port });
|
|
85
|
+
await startHttpTransport(server, meta, { port });
|
|
62
86
|
// Graceful shutdown
|
|
63
87
|
const shutdown = async () => {
|
|
64
88
|
logger.info("Shutting down...");
|
|
@@ -223,6 +247,8 @@ USAGE:
|
|
|
223
247
|
OPTIONS:
|
|
224
248
|
--dry-run Simulate destructive operations without calling Discord API
|
|
225
249
|
--port <port> HTTP port for serve mode (default: 3000)
|
|
250
|
+
--profile <name> Load a tool subset: full, monitoring, readonly, moderation
|
|
251
|
+
--tools "t1,t2,..." Load only the listed tools (overrides --profile)
|
|
226
252
|
|
|
227
253
|
ENVIRONMENT:
|
|
228
254
|
DISCORD_TOKEN Default Discord bot token (required unless all projects have token_env)
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAA+B,MAAM,uBAAuB,CAAC;AAEpF,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEtF,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,gBAAgB;IAChB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,cAAc,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,0BAA0B;IAC1B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,QAAQ,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,6BAA6B;IAC7B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,WAAW,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export declare const ProjectConfigSchema: z.ZodObject<{
|
|
|
18
18
|
token_env?: string | undefined;
|
|
19
19
|
}>;
|
|
20
20
|
export type ProjectConfig = z.infer<typeof ProjectConfigSchema>;
|
|
21
|
+
export declare const ToolProfileEnum: z.ZodEnum<["full", "monitoring", "readonly", "moderation"]>;
|
|
21
22
|
export declare const GlobalConfigSchema: z.ZodObject<{
|
|
22
23
|
projects: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
23
24
|
guild_id: z.ZodString;
|
|
@@ -37,6 +38,9 @@ export declare const GlobalConfigSchema: z.ZodObject<{
|
|
|
37
38
|
}>>;
|
|
38
39
|
default_project: z.ZodOptional<z.ZodString>;
|
|
39
40
|
notification_routing: z.ZodOptional<z.ZodRecord<z.ZodEnum<["ci_build", "deploy", "release", "error", "announcement", "dev"]>, z.ZodString>>;
|
|
41
|
+
tool_profile: z.ZodOptional<z.ZodEnum<["full", "monitoring", "readonly", "moderation"]>>;
|
|
42
|
+
tool_profile_add: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
43
|
+
tool_profile_remove: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
40
44
|
}, "strip", z.ZodTypeAny, {
|
|
41
45
|
projects: Record<string, {
|
|
42
46
|
guild_id: string;
|
|
@@ -46,6 +50,9 @@ export declare const GlobalConfigSchema: z.ZodObject<{
|
|
|
46
50
|
}>;
|
|
47
51
|
default_project?: string | undefined;
|
|
48
52
|
notification_routing?: Partial<Record<"error" | "ci_build" | "deploy" | "release" | "announcement" | "dev", string>> | undefined;
|
|
53
|
+
tool_profile?: "full" | "monitoring" | "readonly" | "moderation" | undefined;
|
|
54
|
+
tool_profile_add?: string[] | undefined;
|
|
55
|
+
tool_profile_remove?: string[] | undefined;
|
|
49
56
|
}, {
|
|
50
57
|
projects: Record<string, {
|
|
51
58
|
guild_id: string;
|
|
@@ -55,17 +62,29 @@ export declare const GlobalConfigSchema: z.ZodObject<{
|
|
|
55
62
|
}>;
|
|
56
63
|
default_project?: string | undefined;
|
|
57
64
|
notification_routing?: Partial<Record<"error" | "ci_build" | "deploy" | "release" | "announcement" | "dev", string>> | undefined;
|
|
65
|
+
tool_profile?: "full" | "monitoring" | "readonly" | "moderation" | undefined;
|
|
66
|
+
tool_profile_add?: string[] | undefined;
|
|
67
|
+
tool_profile_remove?: string[] | undefined;
|
|
58
68
|
}>;
|
|
59
69
|
export type GlobalConfig = z.infer<typeof GlobalConfigSchema>;
|
|
60
70
|
export declare const PerProjectConfigSchema: z.ZodObject<{
|
|
61
71
|
project: z.ZodString;
|
|
62
72
|
notification_routing: z.ZodOptional<z.ZodRecord<z.ZodEnum<["ci_build", "deploy", "release", "error", "announcement", "dev"]>, z.ZodString>>;
|
|
73
|
+
tool_profile: z.ZodOptional<z.ZodEnum<["full", "monitoring", "readonly", "moderation"]>>;
|
|
74
|
+
tool_profile_add: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
75
|
+
tool_profile_remove: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
63
76
|
}, "strip", z.ZodTypeAny, {
|
|
64
77
|
project: string;
|
|
65
78
|
notification_routing?: Partial<Record<"error" | "ci_build" | "deploy" | "release" | "announcement" | "dev", string>> | undefined;
|
|
79
|
+
tool_profile?: "full" | "monitoring" | "readonly" | "moderation" | undefined;
|
|
80
|
+
tool_profile_add?: string[] | undefined;
|
|
81
|
+
tool_profile_remove?: string[] | undefined;
|
|
66
82
|
}, {
|
|
67
83
|
project: string;
|
|
68
84
|
notification_routing?: Partial<Record<"error" | "ci_build" | "deploy" | "release" | "announcement" | "dev", string>> | undefined;
|
|
85
|
+
tool_profile?: "full" | "monitoring" | "readonly" | "moderation" | undefined;
|
|
86
|
+
tool_profile_add?: string[] | undefined;
|
|
87
|
+
tool_profile_remove?: string[] | undefined;
|
|
69
88
|
}>;
|
|
70
89
|
export type PerProjectConfig = z.infer<typeof PerProjectConfigSchema>;
|
|
71
90
|
export declare const EnvConfigSchema: z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB,8EAO3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB,8EAO3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,eAAe,6DAA2D,CAAC;AAExF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;EAMjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAM1B,CAAC"}
|
package/dist/config/schema.js
CHANGED
|
@@ -13,14 +13,21 @@ export const ProjectConfigSchema = z.object({
|
|
|
13
13
|
default_channel: z.string().optional(),
|
|
14
14
|
token_env: z.string().optional(),
|
|
15
15
|
});
|
|
16
|
+
export const ToolProfileEnum = z.enum(["full", "monitoring", "readonly", "moderation"]);
|
|
16
17
|
export const GlobalConfigSchema = z.object({
|
|
17
18
|
projects: z.record(z.string(), ProjectConfigSchema),
|
|
18
19
|
default_project: z.string().optional(),
|
|
19
20
|
notification_routing: z.record(NotificationType, z.string()).optional(),
|
|
21
|
+
tool_profile: ToolProfileEnum.optional(),
|
|
22
|
+
tool_profile_add: z.array(z.string()).optional(),
|
|
23
|
+
tool_profile_remove: z.array(z.string()).optional(),
|
|
20
24
|
});
|
|
21
25
|
export const PerProjectConfigSchema = z.object({
|
|
22
26
|
project: z.string(),
|
|
23
27
|
notification_routing: z.record(NotificationType, z.string()).optional(),
|
|
28
|
+
tool_profile: ToolProfileEnum.optional(),
|
|
29
|
+
tool_profile_add: z.array(z.string()).optional(),
|
|
30
|
+
tool_profile_remove: z.array(z.string()).optional(),
|
|
24
31
|
});
|
|
25
32
|
export const EnvConfigSchema = z.object({
|
|
26
33
|
DISCORD_TOKEN: z.string().min(50).optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC;IACrC,UAAU;IACV,QAAQ;IACR,SAAS;IACT,OAAO;IACP,cAAc;IACd,KAAK;CACN,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,sCAAsC,CAAC;IACjF,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC;IACnD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC;IACrC,UAAU;IACV,QAAQ;IACR,SAAS;IACT,OAAO;IACP,cAAc;IACd,KAAK;CACN,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,sCAAsC,CAAC;IACjF,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC;IACnD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvE,YAAY,EAAE,eAAe,CAAC,QAAQ,EAAE;IACxC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAChD,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvE,YAAY,EAAE,eAAe,CAAC,QAAQ,EAAE;IACxC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAChD,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzC,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5E,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool profiles for loading subsets of tools.
|
|
3
|
+
* Reduces schema overhead when agents only need a few tools.
|
|
4
|
+
*/
|
|
5
|
+
import type { ToolDefinition } from "../tools/types.js";
|
|
6
|
+
export declare const PROFILE_NAMES: readonly ["full", "monitoring", "readonly", "moderation"];
|
|
7
|
+
export type ProfileName = (typeof PROFILE_NAMES)[number];
|
|
8
|
+
export declare const PROFILES: Record<ProfileName, string[] | "all">;
|
|
9
|
+
export declare function isProfileName(s: string): s is ProfileName;
|
|
10
|
+
export interface FilterOptions {
|
|
11
|
+
profile?: string;
|
|
12
|
+
tools?: string[];
|
|
13
|
+
add?: string[];
|
|
14
|
+
remove?: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Filter the full tool list by profile or explicit tool names.
|
|
18
|
+
* `tools` takes precedence over `profile`.
|
|
19
|
+
* `add`/`remove` modify the resolved profile set (ignored when `tools` is used).
|
|
20
|
+
* Throws on unknown profile or tool names.
|
|
21
|
+
*/
|
|
22
|
+
export declare function filterTools(allTools: ToolDefinition[], options?: FilterOptions): ToolDefinition[];
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/profiles/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,eAAO,MAAM,aAAa,2DAA4D,CAAC;AACvF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CA2B1D,CAAC;AAEF,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,WAAW,CAEzD;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,EAAE,CAmEjG"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool profiles for loading subsets of tools.
|
|
3
|
+
* Reduces schema overhead when agents only need a few tools.
|
|
4
|
+
*/
|
|
5
|
+
export const PROFILE_NAMES = ["full", "monitoring", "readonly", "moderation"];
|
|
6
|
+
export const PROFILES = {
|
|
7
|
+
full: "all",
|
|
8
|
+
monitoring: [
|
|
9
|
+
"get_messages",
|
|
10
|
+
"send_message",
|
|
11
|
+
"add_reaction",
|
|
12
|
+
"create_thread",
|
|
13
|
+
"health_check",
|
|
14
|
+
"list_projects",
|
|
15
|
+
],
|
|
16
|
+
readonly: [
|
|
17
|
+
"get_messages",
|
|
18
|
+
"list_channels",
|
|
19
|
+
"list_members",
|
|
20
|
+
"get_guild",
|
|
21
|
+
"health_check",
|
|
22
|
+
"list_projects",
|
|
23
|
+
],
|
|
24
|
+
moderation: [
|
|
25
|
+
"get_messages",
|
|
26
|
+
"kick_member",
|
|
27
|
+
"ban_member",
|
|
28
|
+
"timeout_member",
|
|
29
|
+
"delete_message",
|
|
30
|
+
"purge_messages",
|
|
31
|
+
"query_audit_log",
|
|
32
|
+
],
|
|
33
|
+
};
|
|
34
|
+
export function isProfileName(s) {
|
|
35
|
+
return PROFILE_NAMES.includes(s);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Filter the full tool list by profile or explicit tool names.
|
|
39
|
+
* `tools` takes precedence over `profile`.
|
|
40
|
+
* `add`/`remove` modify the resolved profile set (ignored when `tools` is used).
|
|
41
|
+
* Throws on unknown profile or tool names.
|
|
42
|
+
*/
|
|
43
|
+
export function filterTools(allTools, options) {
|
|
44
|
+
if (!options)
|
|
45
|
+
return allTools;
|
|
46
|
+
const allNames = new Set(allTools.map((t) => t.name));
|
|
47
|
+
// Validate add/remove names against the full tool list
|
|
48
|
+
const addTools = options.add?.filter(Boolean) ?? [];
|
|
49
|
+
const removeTools = options.remove?.filter(Boolean) ?? [];
|
|
50
|
+
if (addTools.length > 0) {
|
|
51
|
+
const unknown = addTools.filter((n) => !allNames.has(n));
|
|
52
|
+
if (unknown.length > 0) {
|
|
53
|
+
throw new Error(`tool_profile_add references unknown tools: ${unknown.join(", ")}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (removeTools.length > 0) {
|
|
57
|
+
const unknown = removeTools.filter((n) => !allNames.has(n));
|
|
58
|
+
if (unknown.length > 0) {
|
|
59
|
+
throw new Error(`tool_profile_remove references unknown tools: ${unknown.join(", ")}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Explicit tool list takes precedence (add/remove ignored)
|
|
63
|
+
if (options.tools && options.tools.length > 0) {
|
|
64
|
+
const unknown = options.tools.filter((n) => !allNames.has(n));
|
|
65
|
+
if (unknown.length > 0) {
|
|
66
|
+
throw new Error(`Unknown tool names: ${unknown.join(", ")}`);
|
|
67
|
+
}
|
|
68
|
+
const selected = new Set(options.tools);
|
|
69
|
+
return allTools.filter((t) => selected.has(t.name));
|
|
70
|
+
}
|
|
71
|
+
// Profile-based filtering
|
|
72
|
+
if (options.profile) {
|
|
73
|
+
if (!isProfileName(options.profile)) {
|
|
74
|
+
throw new Error(`Unknown profile "${options.profile}". Valid profiles: ${PROFILE_NAMES.join(", ")}`);
|
|
75
|
+
}
|
|
76
|
+
const profileTools = PROFILES[options.profile];
|
|
77
|
+
// Start with the base set
|
|
78
|
+
let selected;
|
|
79
|
+
if (profileTools === "all") {
|
|
80
|
+
selected = new Set(allNames);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const unknown = profileTools.filter((n) => !allNames.has(n));
|
|
84
|
+
if (unknown.length > 0) {
|
|
85
|
+
throw new Error(`Profile "${options.profile}" references unknown tools: ${unknown.join(", ")}`);
|
|
86
|
+
}
|
|
87
|
+
selected = new Set(profileTools);
|
|
88
|
+
}
|
|
89
|
+
// Apply add/remove overrides
|
|
90
|
+
for (const name of addTools) {
|
|
91
|
+
selected.add(name);
|
|
92
|
+
}
|
|
93
|
+
for (const name of removeTools) {
|
|
94
|
+
selected.delete(name);
|
|
95
|
+
}
|
|
96
|
+
return allTools.filter((t) => selected.has(t.name));
|
|
97
|
+
}
|
|
98
|
+
return allTools;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/profiles/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/security/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,WAAW,GAAE,MAAW,EAAE,aAAa,GAAE,MAAW;IAKhE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IAkBlE,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;CAO7B"}
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/security/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,WAAW,GAAE,MAAW,EAAE,aAAa,GAAE,MAAW;IAKhE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IAkBlE,KAAK,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAS1D,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;CAO7B"}
|
|
@@ -24,6 +24,14 @@ export class RateLimiter {
|
|
|
24
24
|
this.buckets.set(bucket, entry);
|
|
25
25
|
return { allowed: true };
|
|
26
26
|
}
|
|
27
|
+
stats() {
|
|
28
|
+
const now = Date.now();
|
|
29
|
+
let used = 0;
|
|
30
|
+
for (const entry of this.buckets.values()) {
|
|
31
|
+
used += entry.timestamps.filter((ts) => now - ts < this.windowMs).length;
|
|
32
|
+
}
|
|
33
|
+
return { used, limit: this.maxRequests, windowMs: this.windowMs };
|
|
34
|
+
}
|
|
27
35
|
reset(bucket) {
|
|
28
36
|
if (bucket) {
|
|
29
37
|
this.buckets.delete(bucket);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/security/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,OAAO,WAAW;IACd,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IACpC,WAAW,CAAS;IACpB,QAAQ,CAAS;IAElC,YAAY,cAAsB,EAAE,EAAE,gBAAwB,EAAE;QAC9D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,aAAa,GAAG,IAAI,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAc;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAE7D,2BAA2B;QAC3B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7E,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC;YAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,MAAe;QACnB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/security/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,OAAO,WAAW;IACd,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IACpC,WAAW,CAAS;IACpB,QAAQ,CAAS;IAElC,YAAY,cAAsB,EAAE,EAAE,gBAAwB,EAAE;QAC9D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,aAAa,GAAG,IAAI,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAc;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAE7D,2BAA2B;QAC3B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7E,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC;YAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAC3E,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAe;QACnB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;CACF"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import type { ToolContext } from "./tools/types.js";
|
|
3
|
+
import { RateLimiter } from "./security/rate-limiter.js";
|
|
3
4
|
export interface ServerOptions {
|
|
4
5
|
dryRun?: boolean;
|
|
6
|
+
profile?: string;
|
|
7
|
+
tools?: string[];
|
|
8
|
+
profileAdd?: string[];
|
|
9
|
+
profileRemove?: string[];
|
|
5
10
|
}
|
|
6
|
-
export
|
|
11
|
+
export interface ServerMeta {
|
|
12
|
+
toolCount: number;
|
|
13
|
+
totalTools: number;
|
|
14
|
+
profileName: string;
|
|
15
|
+
startedAt: string;
|
|
16
|
+
standardLimiter: RateLimiter;
|
|
17
|
+
destructiveLimiter: RateLimiter;
|
|
18
|
+
}
|
|
19
|
+
export interface CreateServerResult {
|
|
20
|
+
server: McpServer;
|
|
21
|
+
meta: ServerMeta;
|
|
22
|
+
}
|
|
23
|
+
export declare function createServer(ctx: ToolContext, options?: ServerOptions): CreateServerResult;
|
|
7
24
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAoBzD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,WAAW,CAAC;IAC7B,kBAAkB,EAAE,WAAW,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;CAClB;AAOD,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,kBAAkB,CAmJ1F"}
|
package/dist/server.js
CHANGED
|
@@ -5,6 +5,7 @@ import { sanitizeError } from "./security/sanitizer.js";
|
|
|
5
5
|
import { auditToolCall } from "./security/audit.js";
|
|
6
6
|
import { RateLimiter } from "./security/rate-limiter.js";
|
|
7
7
|
import { checkPermissions } from "./security/permissions.js";
|
|
8
|
+
import { filterTools } from "./profiles/index.js";
|
|
8
9
|
import { logger } from "./utils/logger.js";
|
|
9
10
|
const require = createRequire(import.meta.url);
|
|
10
11
|
const { version: PKG_VERSION } = require("../package.json");
|
|
@@ -19,9 +20,6 @@ function getZodShape(schema) {
|
|
|
19
20
|
}
|
|
20
21
|
return undefined;
|
|
21
22
|
}
|
|
22
|
-
// Tighter limits for destructive operations
|
|
23
|
-
const destructiveLimiter = new RateLimiter(10, 60);
|
|
24
|
-
const standardLimiter = new RateLimiter(30, 60);
|
|
25
23
|
function isDryRunEnabled(options) {
|
|
26
24
|
if (options?.dryRun)
|
|
27
25
|
return true;
|
|
@@ -32,11 +30,21 @@ export function createServer(ctx, options) {
|
|
|
32
30
|
if (dryRun) {
|
|
33
31
|
logger.warn("Dry-run mode active — destructive tools will simulate execution");
|
|
34
32
|
}
|
|
33
|
+
// Filter tools by profile/explicit list, with optional add/remove overrides
|
|
34
|
+
const tools = filterTools(allTools, {
|
|
35
|
+
profile: options?.profile,
|
|
36
|
+
tools: options?.tools,
|
|
37
|
+
add: options?.profileAdd,
|
|
38
|
+
remove: options?.profileRemove,
|
|
39
|
+
});
|
|
40
|
+
const profileName = options?.tools?.length ? "custom" : (options?.profile ?? "full");
|
|
41
|
+
const destructiveLimiter = new RateLimiter(10, 60);
|
|
42
|
+
const standardLimiter = new RateLimiter(30, 60);
|
|
35
43
|
const server = new McpServer({
|
|
36
44
|
name: "discord-ops",
|
|
37
45
|
version: PKG_VERSION,
|
|
38
46
|
});
|
|
39
|
-
for (const tool of
|
|
47
|
+
for (const tool of tools) {
|
|
40
48
|
const shape = getZodShape(tool.inputSchema);
|
|
41
49
|
const callback = async (params) => {
|
|
42
50
|
const start = Date.now();
|
|
@@ -135,7 +143,15 @@ export function createServer(ctx, options) {
|
|
|
135
143
|
server.tool(tool.name, tool.description, callback);
|
|
136
144
|
}
|
|
137
145
|
}
|
|
138
|
-
logger.info(`Registered ${allTools.length} tools`);
|
|
139
|
-
|
|
146
|
+
logger.info(`Registered ${tools.length}/${allTools.length} tools (profile: ${profileName})`);
|
|
147
|
+
const meta = {
|
|
148
|
+
toolCount: tools.length,
|
|
149
|
+
totalTools: allTools.length,
|
|
150
|
+
profileName,
|
|
151
|
+
startedAt: new Date().toISOString(),
|
|
152
|
+
standardLimiter,
|
|
153
|
+
destructiveLimiter,
|
|
154
|
+
};
|
|
155
|
+
return { server, meta };
|
|
140
156
|
}
|
|
141
157
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEnF;;;GAGG;AACH,SAAS,WAAW,CAAC,MAAiB;IACpC,MAAM,GAAG,GAAI,MAAc,CAAC,IAAI,CAAC;IACjC,IAAI,GAAG,EAAE,QAAQ,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-messages.d.ts","sourceRoot":"","sources":["../../../src/tools/messaging/get-messages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"get-messages.d.ts","sourceRoot":"","sources":["../../../src/tools/messaging/get-messages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuClD,eAAO,MAAM,WAAW,EAAE,cAuCzB,CAAC"}
|
|
@@ -2,18 +2,37 @@ import { z } from "zod";
|
|
|
2
2
|
import { toolResultJson } from "../types.js";
|
|
3
3
|
import { snowflakeId } from "../schema.js";
|
|
4
4
|
import { resolveTarget } from "../../routing/resolver.js";
|
|
5
|
+
import { isTimestamp, timestampToSnowflake } from "../../utils/snowflake.js";
|
|
6
|
+
/**
|
|
7
|
+
* Accept either a Discord snowflake ID or an ISO 8601 timestamp.
|
|
8
|
+
* Timestamps are converted to snowflakes automatically.
|
|
9
|
+
*/
|
|
10
|
+
const snowflakeOrTimestamp = z.string().transform((val) => {
|
|
11
|
+
if (isTimestamp(val)) {
|
|
12
|
+
return timestampToSnowflake(val);
|
|
13
|
+
}
|
|
14
|
+
// Validate as snowflake
|
|
15
|
+
if (!/^\d{17,20}$/.test(val)) {
|
|
16
|
+
throw new Error(`Invalid value "${val}": must be a Discord snowflake ID or ISO 8601 timestamp`);
|
|
17
|
+
}
|
|
18
|
+
return val;
|
|
19
|
+
});
|
|
5
20
|
const inputSchema = z.object({
|
|
6
21
|
channel_id: snowflakeId.optional().describe("Direct channel ID"),
|
|
7
22
|
guild_id: snowflakeId.optional().describe("Direct guild ID"),
|
|
8
23
|
project: z.string().optional().describe("Project name for routing"),
|
|
9
24
|
channel: z.string().optional().describe("Channel alias within project"),
|
|
10
25
|
limit: z.number().min(1).max(100).default(50).describe("Number of messages to fetch (max 100)"),
|
|
11
|
-
before:
|
|
12
|
-
|
|
26
|
+
before: snowflakeOrTimestamp
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Get messages before this message ID or ISO 8601 timestamp (e.g. 2025-01-01T00:00:00Z)"),
|
|
29
|
+
after: snowflakeOrTimestamp
|
|
30
|
+
.optional()
|
|
31
|
+
.describe("Get messages after this message ID or ISO 8601 timestamp (e.g. 2025-01-01T00:00:00Z)"),
|
|
13
32
|
});
|
|
14
33
|
export const getMessages = {
|
|
15
34
|
name: "get_messages",
|
|
16
|
-
description: "Fetch recent messages from a Discord channel.",
|
|
35
|
+
description: "Fetch recent messages from a Discord channel. Supports both snowflake IDs and ISO 8601 timestamps for before/after parameters.",
|
|
17
36
|
category: "messaging",
|
|
18
37
|
inputSchema,
|
|
19
38
|
handle: async (input, ctx) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-messages.js","sourceRoot":"","sources":["../../../src/tools/messaging/get-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"get-messages.js","sourceRoot":"","sources":["../../../src/tools/messaging/get-messages.ts"],"names":[],"mappings":"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"}
|
package/dist/transport/http.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { ServerMeta } from "../server.js";
|
|
2
3
|
export interface HttpTransportOptions {
|
|
3
4
|
port?: number;
|
|
4
5
|
/** Bearer token required for all requests. Read from DISCORD_OPS_HTTP_TOKEN env if not set. */
|
|
5
6
|
authToken?: string;
|
|
6
7
|
}
|
|
7
|
-
export declare function startHttpTransport(server: McpServer, options?: HttpTransportOptions): Promise<void>;
|
|
8
|
+
export declare function startHttpTransport(server: McpServer, meta: ServerMeta, options?: HttpTransportOptions): Promise<void>;
|
|
8
9
|
//# sourceMappingURL=http.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAS/C,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2BD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAoHf"}
|
package/dist/transport/http.js
CHANGED
|
@@ -27,7 +27,7 @@ function checkAuth(req, token) {
|
|
|
27
27
|
return { authorized: false, error: "Invalid token" };
|
|
28
28
|
return { authorized: true };
|
|
29
29
|
}
|
|
30
|
-
export async function startHttpTransport(server, options = {}) {
|
|
30
|
+
export async function startHttpTransport(server, meta, options = {}) {
|
|
31
31
|
const port = options.port ?? 3000;
|
|
32
32
|
const authToken = options.authToken ?? process.env.DISCORD_OPS_HTTP_TOKEN;
|
|
33
33
|
if (!authToken) {
|
|
@@ -49,8 +49,21 @@ export async function startHttpTransport(server, options = {}) {
|
|
|
49
49
|
// Health endpoint is exempt from auth (for load balancers / probes)
|
|
50
50
|
const url = new URL(req.url ?? "/", `http://localhost:${port}`);
|
|
51
51
|
if (req.method === "GET" && url.pathname === "/health") {
|
|
52
|
+
const startMs = new Date(meta.startedAt).getTime();
|
|
53
|
+
const uptimeSeconds = Math.floor((Date.now() - startMs) / 1000);
|
|
52
54
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
53
|
-
res.end(JSON.stringify({
|
|
55
|
+
res.end(JSON.stringify({
|
|
56
|
+
status: "ok",
|
|
57
|
+
uptime: uptimeSeconds,
|
|
58
|
+
toolProfile: meta.profileName,
|
|
59
|
+
toolCount: meta.toolCount,
|
|
60
|
+
totalTools: meta.totalTools,
|
|
61
|
+
sessions: transports.size,
|
|
62
|
+
rateLimiter: {
|
|
63
|
+
standard: meta.standardLimiter.stats(),
|
|
64
|
+
destructive: meta.destructiveLimiter.stats(),
|
|
65
|
+
},
|
|
66
|
+
}));
|
|
54
67
|
return;
|
|
55
68
|
}
|
|
56
69
|
// Authenticate all other endpoints
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,IAAI,gBAAgB,GAGjC,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discord snowflake ↔ ISO 8601 timestamp conversion utilities.
|
|
3
|
+
*/
|
|
4
|
+
/** Discord epoch: 2015-01-01T00:00:00.000Z */
|
|
5
|
+
export declare const DISCORD_EPOCH = 1420070400000n;
|
|
6
|
+
/**
|
|
7
|
+
* Convert an ISO 8601 timestamp to a Discord snowflake ID.
|
|
8
|
+
* The snowflake encodes the timestamp in its upper bits (worker/process/increment = 0).
|
|
9
|
+
*/
|
|
10
|
+
export declare function timestampToSnowflake(iso: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Detect whether a string looks like an ISO 8601 timestamp vs. an all-digit snowflake.
|
|
13
|
+
* Returns true if the value contains `-` or `T` (timestamp indicators).
|
|
14
|
+
*/
|
|
15
|
+
export declare function isTimestamp(value: string): boolean;
|
|
16
|
+
//# sourceMappingURL=snowflake.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snowflake.d.ts","sourceRoot":"","sources":["../../src/utils/snowflake.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,aAAa,iBAAiB,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discord snowflake ↔ ISO 8601 timestamp conversion utilities.
|
|
3
|
+
*/
|
|
4
|
+
/** Discord epoch: 2015-01-01T00:00:00.000Z */
|
|
5
|
+
export const DISCORD_EPOCH = 1420070400000n;
|
|
6
|
+
/**
|
|
7
|
+
* Convert an ISO 8601 timestamp to a Discord snowflake ID.
|
|
8
|
+
* The snowflake encodes the timestamp in its upper bits (worker/process/increment = 0).
|
|
9
|
+
*/
|
|
10
|
+
export function timestampToSnowflake(iso) {
|
|
11
|
+
const ms = Date.parse(iso);
|
|
12
|
+
if (isNaN(ms)) {
|
|
13
|
+
throw new Error(`Invalid ISO 8601 timestamp: ${iso}`);
|
|
14
|
+
}
|
|
15
|
+
const discordMs = BigInt(ms) - DISCORD_EPOCH;
|
|
16
|
+
if (discordMs < 0n) {
|
|
17
|
+
throw new Error(`Timestamp ${iso} is before the Discord epoch (2015-01-01)`);
|
|
18
|
+
}
|
|
19
|
+
// Snowflake = (ms since Discord epoch) << 22
|
|
20
|
+
return (discordMs << 22n).toString();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Detect whether a string looks like an ISO 8601 timestamp vs. an all-digit snowflake.
|
|
24
|
+
* Returns true if the value contains `-` or `T` (timestamp indicators).
|
|
25
|
+
*/
|
|
26
|
+
export function isTimestamp(value) {
|
|
27
|
+
return value.includes("-") || value.includes("T");
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=snowflake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snowflake.js","sourceRoot":"","sources":["../../src/utils/snowflake.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC;IAC7C,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,2CAA2C,CAAC,CAAC;IAC/E,CAAC;IACD,6CAA6C;IAC7C,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discord-ops",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Agency-grade Discord MCP server with multi-guild project routing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"test:coverage": "vitest run --coverage",
|
|
55
55
|
"format": "prettier --write .",
|
|
56
56
|
"format:check": "prettier --check .",
|
|
57
|
-
"prepublishOnly": "npm run build",
|
|
57
|
+
"prepublishOnly": "node scripts/block-local-publish.mjs && npm run build",
|
|
58
58
|
"changeset": "changeset",
|
|
59
59
|
"release": "changeset publish"
|
|
60
60
|
},
|