@asif2bd/umami-mcp 0.1.5 → 0.1.6

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/dist/index.js CHANGED
@@ -6,13 +6,14 @@ import { loadEnvFile } from './envfile.js';
6
6
  import { UmamiClient } from './client.js';
7
7
  import { registerSecrets, redactUnknown } from './redact.js';
8
8
  import { buildServer } from './server.js';
9
+ import { canStartUnconfigured, unconfiguredClient, unconfiguredConfig, unconfiguredMessage, } from './unconfigured.js';
9
10
  /**
10
11
  * On stdio, stdout carries the JSON-RPC stream and must never be polluted.
11
12
  * All human-facing logging therefore goes to stderr.
12
13
  */
13
14
  const log = (...args) => console.error('[umami-mcp]', ...args);
14
- async function startStdio(config, client) {
15
- const { server, registered, withheld } = buildServer(config, client);
15
+ async function startStdio(config, client, unavailable) {
16
+ const { server, registered, withheld } = buildServer(config, client, { unavailable });
16
17
  log(`${registered.length} tools available, ${withheld.length} withheld by mode "${config.mode}"`);
17
18
  await server.connect(new StdioServerTransport());
18
19
  log('ready on stdio');
@@ -33,6 +34,13 @@ async function main() {
33
34
  catch (err) {
34
35
  if (err instanceof ConfigError) {
35
36
  log('configuration error:', err.message);
37
+ if (canStartUnconfigured()) {
38
+ // Lets registries and inspectors list the tools; every call returns
39
+ // this same error, so a misconfigured user still learns what to fix.
40
+ log('starting unconfigured: read-only tools are listed, every call will fail until configured.');
41
+ await startStdio(unconfiguredConfig(), unconfiguredClient(err.message), unconfiguredMessage(err.message));
42
+ return;
43
+ }
36
44
  process.exit(78); // EX_CONFIG
37
45
  }
38
46
  throw err;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -3,10 +3,20 @@ import { UmamiClient } from './client.js';
3
3
  import type { Config } from './config.js';
4
4
  import { type ToolDef } from './tools/index.js';
5
5
  export declare const SERVER_NAME = "umami-mcp";
6
- export declare const SERVER_VERSION = "0.1.5";
6
+ export declare const SERVER_VERSION = "0.1.6";
7
7
  export interface BuiltServer {
8
8
  server: McpServer;
9
9
  registered: ToolDef[];
10
10
  withheld: ToolDef[];
11
11
  }
12
- export declare function buildServer(config: Config, client?: UmamiClient): BuiltServer;
12
+ export interface BuildOptions {
13
+ /**
14
+ * When set, the server is running without usable configuration: tools are
15
+ * still listed, but every call returns this message instead of running.
16
+ * Checked here rather than in the client because several handlers
17
+ * deliberately tolerate individual endpoint failures, which would turn
18
+ * "not configured" into a misleading empty result.
19
+ */
20
+ unavailable?: string;
21
+ }
22
+ export declare function buildServer(config: Config, client?: UmamiClient, opts?: BuildOptions): BuiltServer;
package/dist/server.js CHANGED
@@ -3,8 +3,8 @@ import { UmamiClient } from './client.js';
3
3
  import { redactUnknown } from './redact.js';
4
4
  import { allTools, isAllowed } from './tools/index.js';
5
5
  export const SERVER_NAME = 'umami-mcp';
6
- export const SERVER_VERSION = '0.1.5';
7
- export function buildServer(config, client = new UmamiClient(config)) {
6
+ export const SERVER_VERSION = '0.1.6';
7
+ export function buildServer(config, client = new UmamiClient(config), opts = {}) {
8
8
  const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION });
9
9
  const ctx = { client, config };
10
10
  const registered = [];
@@ -26,6 +26,12 @@ export function buildServer(config, client = new UmamiClient(config)) {
26
26
  openWorldHint: true,
27
27
  },
28
28
  }, async (args) => {
29
+ if (opts.unavailable) {
30
+ return {
31
+ isError: true,
32
+ content: [{ type: 'text', text: `${tool.name} failed: ${opts.unavailable}` }],
33
+ };
34
+ }
29
35
  try {
30
36
  const result = await tool.handler(ctx, args ?? {});
31
37
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAkC,MAAM,kBAAkB,CAAC;AAEvF,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAQtC,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAE5C,MAAM,UAAU,GAAc,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtB,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,MAAM;YACxB,WAAW,EAAE;gBACX,YAAY,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM;gBAClC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC1C,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM;gBACpC,aAAa,EAAE,IAAI;aACpB;SACF,EACD,KAAK,EAAE,IAAyB,EAAE,EAAE;YAClC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;gBACnD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBAC5E,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kEAAkE;gBAClE,4DAA4D;gBAC5D,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,YAAY,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;iBACzF,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAkC,MAAM,kBAAkB,CAAC;AAEvF,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAmBtC,MAAM,UAAU,WAAW,CACzB,MAAc,EACd,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,EAChC,OAAqB,EAAE;IAEvB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAE5C,MAAM,UAAU,GAAc,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtB,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,MAAM;YACxB,WAAW,EAAE;gBACX,YAAY,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM;gBAClC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC1C,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM;gBACpC,aAAa,EAAE,IAAI;aACpB;SACF,EACD,KAAK,EAAE,IAAyB,EAAE,EAAE;YAClC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;iBACvF,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;gBACnD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBAC5E,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kEAAkE;gBAClE,4DAA4D;gBAC5D,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,YAAY,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;iBACzF,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { type Config } from './config.js';
2
+ import type { UmamiClient } from './client.js';
3
+ /**
4
+ * Used when the server is started over stdio with no usable configuration --
5
+ * most often by a registry or directory (Glama, MCP inspectors) that launches
6
+ * the server only to list its tools.
7
+ *
8
+ * Exiting in that case makes the server look broken to anything that just
9
+ * wants to see what it offers. Instead it starts with the least-privileged
10
+ * tool set, and every tool call fails with the original configuration error
11
+ * so a real user still sees exactly what to fix.
12
+ *
13
+ * No request is ever sent anywhere in this mode: there is no URL to send it to.
14
+ */
15
+ export declare function unconfiguredConfig(): Config;
16
+ export declare function unconfiguredMessage(reason: string): string;
17
+ /** Belt and braces: even if a call slipped past the server's guard, nothing is sent. */
18
+ export declare function unconfiguredClient(reason: string): UmamiClient;
19
+ /**
20
+ * True when a failed configuration should still start the server for tool
21
+ * listing: stdio only. An HTTP or OAuth deployment with bad settings must
22
+ * keep failing loudly at boot -- it is a service, not an introspection target.
23
+ */
24
+ export declare function canStartUnconfigured(env?: NodeJS.ProcessEnv): boolean;
@@ -0,0 +1,56 @@
1
+ import { ConfigError } from './config.js';
2
+ /**
3
+ * Used when the server is started over stdio with no usable configuration --
4
+ * most often by a registry or directory (Glama, MCP inspectors) that launches
5
+ * the server only to list its tools.
6
+ *
7
+ * Exiting in that case makes the server look broken to anything that just
8
+ * wants to see what it offers. Instead it starts with the least-privileged
9
+ * tool set, and every tool call fails with the original configuration error
10
+ * so a real user still sees exactly what to fix.
11
+ *
12
+ * No request is ever sent anywhere in this mode: there is no URL to send it to.
13
+ */
14
+ export function unconfiguredConfig() {
15
+ return {
16
+ url: '',
17
+ teamId: undefined,
18
+ // Always read-only: an unconfigured process has no business advertising
19
+ // write or admin tools, whatever UMAMI_MCP_MODE says.
20
+ mode: 'read',
21
+ allowDestructive: false,
22
+ transport: 'stdio',
23
+ host: '127.0.0.1',
24
+ port: 3334,
25
+ timeoutMs: 30_000,
26
+ oauth: undefined,
27
+ };
28
+ }
29
+ export function unconfiguredMessage(reason) {
30
+ return (`umami-mcp is not configured: ${reason} ` +
31
+ 'Set the environment variables in your MCP client config and restart the server.');
32
+ }
33
+ /** Belt and braces: even if a call slipped past the server's guard, nothing is sent. */
34
+ export function unconfiguredClient(reason) {
35
+ const fail = async () => {
36
+ throw new ConfigError(unconfiguredMessage(reason));
37
+ };
38
+ return {
39
+ request: fail,
40
+ get: fail,
41
+ post: fail,
42
+ del: fail,
43
+ verify: fail,
44
+ };
45
+ }
46
+ /**
47
+ * True when a failed configuration should still start the server for tool
48
+ * listing: stdio only. An HTTP or OAuth deployment with bad settings must
49
+ * keep failing loudly at boot -- it is a service, not an introspection target.
50
+ */
51
+ export function canStartUnconfigured(env = process.env) {
52
+ const transport = (env.UMAMI_MCP_TRANSPORT ?? env.TRANSPORT ?? 'stdio').trim().toLowerCase();
53
+ const oauth = ['1', 'true', 'yes', 'on'].includes((env.UMAMI_MCP_OAUTH ?? '').trim().toLowerCase());
54
+ return transport === 'stdio' && !oauth;
55
+ }
56
+ //# sourceMappingURL=unconfigured.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unconfigured.js","sourceRoot":"","sources":["../src/unconfigured.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AAGvD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,GAAG,EAAE,EAAE;QACP,MAAM,EAAE,SAAS;QACjB,wEAAwE;QACxE,sDAAsD;QACtD,IAAI,EAAE,MAAM;QACZ,gBAAgB,EAAE,KAAK;QACvB,SAAS,EAAE,OAAO;QAClB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,SAAS;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,CACL,gCAAgC,MAAM,GAAG;QACzC,iFAAiF,CAClF,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,IAAI,GAAG,KAAK,IAAoB,EAAE;QACtC,MAAM,IAAI,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,IAAI;KACa,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACvE,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7F,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACpG,OAAO,SAAS,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC;AACzC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asif2bd/umami-mcp",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "mcpName": "io.github.Asif2BD/umami-mcp",
5
5
  "description": "Model Context Protocol server for Umami Analytics. Self-hosted, credentials never leave your environment.",
6
6
  "type": "module",