@runapi.ai/mcp-core 0.1.4 → 0.1.5

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 CHANGED
@@ -90,7 +90,12 @@ Connect the returned server with an MCP transport, for example `StdioServerTrans
90
90
 
91
91
  ## Authentication
92
92
 
93
- Authenticated RunAPI calls use `RUNAPI_API_KEY` by default:
93
+ Authenticated RunAPI calls resolve auth in this order:
94
+
95
+ 1. `RUNAPI_API_KEY`, useful for headless and CI hosts.
96
+ 2. `~/.config/runapi/config.json`, created by the MCP `login` tool or `runapi login`.
97
+
98
+ Headless hosts can set:
94
99
 
95
100
  ```bash
96
101
  export RUNAPI_API_KEY=your_key_here
@@ -100,7 +105,7 @@ export RUNAPI_API_KEY=your_key_here
100
105
 
101
106
  ## Package Design
102
107
 
103
- `@runapi.ai/mcp-core` does not read files at runtime. Server packages pass their embedded contract and pricing JSON into the library, which keeps published MCP packages deterministic and easy to smoke test.
108
+ `@runapi.ai/mcp-core` does not read catalog or pricing files at runtime. Server packages pass their embedded contract and pricing JSON into the library, which keeps published MCP packages deterministic and easy to smoke test.
104
109
 
105
110
  The package is ESM-only and ships TypeScript declarations.
106
111
 
package/dist/config.d.ts CHANGED
@@ -2,6 +2,19 @@ export type RunApiConfig = {
2
2
  apiKey?: string;
3
3
  baseUrl: string;
4
4
  };
5
+ export type CredentialSource = "env" | "config";
6
+ export type ConfigFile = {
7
+ apiKey?: string;
8
+ api_key?: string;
9
+ baseUrl?: string;
10
+ base_url?: string;
11
+ };
12
+ export type RunApiConfigDetails = RunApiConfig & {
13
+ apiKeySource?: CredentialSource;
14
+ configFile: string;
15
+ };
5
16
  export declare function configPath(): string;
6
- export declare function loadConfig(env?: NodeJS.ProcessEnv): RunApiConfig;
17
+ export declare function loadConfig(env?: NodeJS.ProcessEnv, filePath?: string): RunApiConfig;
18
+ export declare function loadConfigDetails(env?: NodeJS.ProcessEnv, filePath?: string): RunApiConfigDetails;
7
19
  export declare function requireApiKey(config?: RunApiConfig): string;
20
+ export declare function readConfigFile(filePath?: string): ConfigFile;
package/dist/config.js CHANGED
@@ -5,25 +5,32 @@ import { DEFAULT_BASE_URL, RUNAPI_API_KEY_ENV } from "./constants.js";
5
5
  export function configPath() {
6
6
  return path.join(os.homedir(), ".config", "runapi", "config.json");
7
7
  }
8
- export function loadConfig(env = process.env) {
9
- const file = readConfigFile();
10
- const apiKey = env[RUNAPI_API_KEY_ENV]?.trim() || file.apiKey || file.api_key || undefined;
11
- const baseUrl = env.RUNAPI_BASE_URL?.trim() || file.baseUrl || file.base_url || DEFAULT_BASE_URL;
8
+ export function loadConfig(env = process.env, filePath = configPath()) {
9
+ const { apiKey, baseUrl } = loadConfigDetails(env, filePath);
12
10
  return { apiKey, baseUrl };
13
11
  }
12
+ export function loadConfigDetails(env = process.env, filePath = configPath()) {
13
+ const file = readConfigFile(filePath);
14
+ const envApiKey = env[RUNAPI_API_KEY_ENV]?.trim();
15
+ const fileApiKey = file.api_key || file.apiKey || undefined;
16
+ const apiKey = envApiKey || fileApiKey;
17
+ const apiKeySource = envApiKey ? "env" : fileApiKey ? "config" : undefined;
18
+ const baseUrl = env.RUNAPI_BASE_URL?.trim() || file.baseUrl || file.base_url || DEFAULT_BASE_URL;
19
+ return { apiKey, apiKeySource, baseUrl, configFile: filePath };
20
+ }
14
21
  export function requireApiKey(config = loadConfig()) {
15
22
  if (!config.apiKey) {
16
- throw new Error("RunAPI API key is required. Sign up at https://runapi.ai, go to Dashboard > API Keys, then: mkdir -p ~/.config/runapi && echo '{\"api_key\":\"YOUR_KEY\"}' > ~/.config/runapi/config.json");
23
+ throw new Error("RunAPI API key is required. In an MCP host, call the login tool for browser login at https://runapi.ai. In a terminal, run `runapi login`. Headless hosts can set RUNAPI_API_KEY or pre-provision ~/.config/runapi/config.json.");
17
24
  }
18
25
  return config.apiKey;
19
26
  }
20
- function readConfigFile() {
21
- const file = configPath();
22
- if (!fs.existsSync(file)) {
27
+ export function readConfigFile(filePath = configPath()) {
28
+ if (!fs.existsSync(filePath)) {
23
29
  return {};
24
30
  }
25
31
  try {
26
- return JSON.parse(fs.readFileSync(file, "utf8"));
32
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
33
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
27
34
  }
28
35
  catch {
29
36
  return {};
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AActE,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC;IAC3F,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IAEjG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;IACjD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2LAA2L,CAAC,CAAC;IAC/M,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAe,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAqBtE,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,EAAE;IACtF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,EAAE;IAC7F,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,GAAG,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;IAC5D,MAAM,MAAM,GAAG,SAAS,IAAI,UAAU,CAAC;IACvC,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IAEjG,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;IACjD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,iOAAiO,CAAC,CAAC;IACrP,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAQ,GAAG,UAAU,EAAE;IACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;IACpG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export declare const CORE_PACKAGE_NAME = "@runapi.ai/mcp-core";
2
- export declare const CORE_PACKAGE_VERSION = "0.1.4";
2
+ export declare const CORE_PACKAGE_VERSION = "0.1.5";
3
3
  export declare const DEFAULT_BASE_URL = "https://runapi.ai";
4
4
  export declare const RUNAPI_API_KEY_ENV = "RUNAPI_API_KEY";
5
- export declare const USER_AGENT = "@runapi.ai/mcp-core/0.1.4";
5
+ export declare const USER_AGENT = "@runapi.ai/mcp-core/0.1.5";
package/dist/constants.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export const CORE_PACKAGE_NAME = "@runapi.ai/mcp-core";
2
- export const CORE_PACKAGE_VERSION = "0.1.4";
2
+ export const CORE_PACKAGE_VERSION = "0.1.5";
3
3
  export const DEFAULT_BASE_URL = "https://runapi.ai";
4
4
  export const RUNAPI_API_KEY_ENV = "RUNAPI_API_KEY";
5
5
  export const USER_AGENT = `${CORE_PACKAGE_NAME}/${CORE_PACKAGE_VERSION}`;
package/dist/errors.js CHANGED
@@ -18,7 +18,7 @@ export function friendlyError(error) {
18
18
  if (error instanceof RunApiClientError) {
19
19
  switch (error.status) {
20
20
  case 401:
21
- return "RunAPI rejected the API key. Check RUNAPI_API_KEY or ~/.config/runapi/config.json.";
21
+ return "RunAPI rejected the API key. Call the login tool or run `runapi login`, then retry. Headless hosts can update RUNAPI_API_KEY or ~/.config/runapi/config.json.";
22
22
  case 402:
23
23
  return "The RunAPI account has insufficient credits. Add credits in the RunAPI dashboard, then retry.";
24
24
  case 429:
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export * from "./tool-response.js";
7
7
  export * from "./schema.js";
8
8
  export * from "./contract.js";
9
9
  export * from "./pricing.js";
10
+ export * from "./login.js";
10
11
  export { validateInputRules } from "./input-rules.js";
11
12
  export * from "./runapi-client.js";
12
13
  export * from "./server.js";
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ export * from "./tool-response.js";
7
7
  export * from "./schema.js";
8
8
  export * from "./contract.js";
9
9
  export * from "./pricing.js";
10
+ export * from "./login.js";
10
11
  export { validateInputRules } from "./input-rules.js";
11
12
  export * from "./runapi-client.js";
12
13
  export * from "./server.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
@@ -0,0 +1,68 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export type LoginInput = {
3
+ force?: boolean;
4
+ };
5
+ export type LoginResult = {
6
+ authenticated: boolean;
7
+ source?: "env" | "config";
8
+ base_url: string;
9
+ config_path: string;
10
+ wrote_config: boolean;
11
+ verified?: boolean;
12
+ browser_opened?: boolean;
13
+ open_browser_error?: string;
14
+ authorize_url?: string;
15
+ callback_url?: string;
16
+ callback_port?: number;
17
+ display_code?: string;
18
+ expires_in_seconds?: number;
19
+ user?: {
20
+ email?: string;
21
+ };
22
+ token_name?: string;
23
+ error?: string;
24
+ hint?: string;
25
+ };
26
+ export type CallbackPayload = {
27
+ code?: string;
28
+ state?: string;
29
+ error?: string;
30
+ error_description?: string;
31
+ };
32
+ export type CallbackListener = {
33
+ port: number;
34
+ wait: () => Promise<CallbackPayload>;
35
+ close: () => Promise<void> | void;
36
+ };
37
+ export type LoginPendingPayload = Pick<LoginResult, "authorize_url" | "callback_url" | "callback_port" | "display_code" | "expires_in_seconds" | "browser_opened" | "open_browser_error">;
38
+ export type LoginDependencies = {
39
+ env?: NodeJS.ProcessEnv;
40
+ configFile?: string;
41
+ fetchImpl?: typeof fetch;
42
+ hostname?: string;
43
+ userAgent?: string;
44
+ timeoutMs?: number;
45
+ openBrowserTimeoutMs?: number;
46
+ randomBytes?: (size: number) => Buffer;
47
+ signal?: AbortSignal;
48
+ openBrowser?: (url: string) => Promise<void>;
49
+ createCallbackListener?: (options: {
50
+ state: string;
51
+ timeoutMs: number;
52
+ }) => Promise<CallbackListener>;
53
+ onPending?: (payload: LoginPendingPayload) => Promise<void> | void;
54
+ };
55
+ export type PkcePair = {
56
+ codeVerifier: string;
57
+ codeChallenge: string;
58
+ codeChallengeMethod: "S256";
59
+ };
60
+ export declare function generatePkcePair(bytes?: Uint8Array): PkcePair;
61
+ export declare function generateDisplayCode(bytes?: Uint8Array): string;
62
+ export declare function login(input?: LoginInput, deps?: LoginDependencies): Promise<LoginResult>;
63
+ export declare function registerLoginTool(server: McpServer, deps?: LoginDependencies): void;
64
+ export declare function openSystemBrowser(url: string, platform?: NodeJS.Platform, timeoutMs?: number): Promise<void>;
65
+ export declare function browserCommand(url: string, platform: NodeJS.Platform): {
66
+ command: string;
67
+ args: string[];
68
+ } | undefined;
package/dist/login.js ADDED
@@ -0,0 +1,579 @@
1
+ import { spawn } from "node:child_process";
2
+ import crypto from "node:crypto";
3
+ import fs from "node:fs";
4
+ import http from "node:http";
5
+ import os from "node:os";
6
+ import path from "node:path";
7
+ import { z } from "zod";
8
+ import { DEFAULT_BASE_URL, RUNAPI_API_KEY_ENV, USER_AGENT } from "./constants.js";
9
+ import { configPath, loadConfigDetails, readConfigFile } from "./config.js";
10
+ import { errorFromResponse, friendlyError, RunApiClientError } from "./errors.js";
11
+ import { RunApiClient } from "./runapi-client.js";
12
+ import { jsonText } from "./tool-response.js";
13
+ const LOGIN_TIMEOUT_MS = 300_000;
14
+ const OPEN_BROWSER_TIMEOUT_MS = 10_000;
15
+ const DISPLAY_CODE_ALPHABET = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
16
+ class LoginCancelledError extends Error {
17
+ constructor() {
18
+ super("RunAPI login was cancelled.");
19
+ this.name = "LoginCancelledError";
20
+ }
21
+ }
22
+ export function generatePkcePair(bytes = crypto.randomBytes(32)) {
23
+ const codeVerifier = base64Url(bytes);
24
+ return {
25
+ codeVerifier,
26
+ codeChallenge: base64Url(crypto.createHash("sha256").update(codeVerifier).digest()),
27
+ codeChallengeMethod: "S256"
28
+ };
29
+ }
30
+ export function generateDisplayCode(bytes = crypto.randomBytes(5)) {
31
+ let buffer = 0;
32
+ let bits = 0;
33
+ let output = "";
34
+ for (const byte of bytes) {
35
+ buffer = (buffer << 8) | byte;
36
+ bits += 8;
37
+ while (bits >= 5 && output.length < 8) {
38
+ bits -= 5;
39
+ output += DISPLAY_CODE_ALPHABET[(buffer >> bits) & 31];
40
+ }
41
+ }
42
+ while (output.length < 8) {
43
+ output += DISPLAY_CODE_ALPHABET[0];
44
+ }
45
+ return `${output.slice(0, 4)}-${output.slice(4, 8)}`;
46
+ }
47
+ export async function login(input = {}, deps = {}) {
48
+ const env = deps.env ?? process.env;
49
+ const configFile = deps.configFile ?? configPath();
50
+ const config = loadConfigDetails(env, configFile);
51
+ const baseResult = {
52
+ base_url: config.baseUrl,
53
+ config_path: configFile,
54
+ wrote_config: false
55
+ };
56
+ if (config.apiKeySource === "env") {
57
+ if (input.force) {
58
+ return {
59
+ ...baseResult,
60
+ authenticated: true,
61
+ source: "env",
62
+ hint: `${RUNAPI_API_KEY_ENV} is set and takes precedence over local config. Unset or update it before forcing browser login.`
63
+ };
64
+ }
65
+ return {
66
+ ...baseResult,
67
+ authenticated: true,
68
+ source: "env",
69
+ hint: `Using ${RUNAPI_API_KEY_ENV}. If authenticated tools fail, update or unset the environment variable.`
70
+ };
71
+ }
72
+ if (config.apiKeySource === "config" && !input.force) {
73
+ return {
74
+ ...baseResult,
75
+ authenticated: true,
76
+ source: "config"
77
+ };
78
+ }
79
+ const randomBytes = deps.randomBytes ?? ((size) => crypto.randomBytes(size));
80
+ const state = base64Url(randomBytes(32));
81
+ const pkce = generatePkcePair(randomBytes(32));
82
+ const displayCode = generateDisplayCode(randomBytes(5));
83
+ const timeoutMs = deps.timeoutMs ?? LOGIN_TIMEOUT_MS;
84
+ const hostname = deps.hostname ?? (os.hostname() || "device");
85
+ const fetchImpl = deps.fetchImpl ?? fetch;
86
+ const userAgent = deps.userAgent ?? USER_AGENT;
87
+ const signal = deps.signal;
88
+ const openBrowserTimeoutMs = deps.openBrowserTimeoutMs ?? OPEN_BROWSER_TIMEOUT_MS;
89
+ let listener;
90
+ let callbackUrl;
91
+ let authorizeUrl;
92
+ let browserOpened;
93
+ let openBrowserError;
94
+ try {
95
+ throwIfAborted(signal);
96
+ listener = await (deps.createCallbackListener ?? createLoopbackCallbackListener)({ state, timeoutMs });
97
+ callbackUrl = `http://127.0.0.1:${listener.port}/callback`;
98
+ authorizeUrl = buildAuthorizeUrl(config.baseUrl, {
99
+ state,
100
+ codeChallenge: pkce.codeChallenge,
101
+ redirectPort: listener.port,
102
+ displayCode,
103
+ hostname
104
+ });
105
+ browserOpened = true;
106
+ try {
107
+ await withCancellation(withTimeout((deps.openBrowser ?? openSystemBrowser)(authorizeUrl), openBrowserTimeoutMs, "Opening the browser timed out."), signal);
108
+ }
109
+ catch (error) {
110
+ if (error instanceof LoginCancelledError) {
111
+ throw error;
112
+ }
113
+ browserOpened = false;
114
+ openBrowserError = friendlyError(error);
115
+ await notifyPending(deps.onPending, pendingPayload({
116
+ authorizeUrl,
117
+ callbackUrl,
118
+ callbackPort: listener.port,
119
+ displayCode,
120
+ timeoutMs,
121
+ browserOpened,
122
+ openBrowserError
123
+ }));
124
+ }
125
+ const callback = await withCancellation(listener.wait(), signal);
126
+ if (callback.state !== state) {
127
+ return {
128
+ ...baseResult,
129
+ authenticated: false,
130
+ browser_opened: browserOpened,
131
+ open_browser_error: openBrowserError,
132
+ authorize_url: authorizeUrl,
133
+ callback_url: callbackUrl,
134
+ callback_port: listener.port,
135
+ display_code: displayCode,
136
+ expires_in_seconds: Math.floor(timeoutMs / 1000),
137
+ error: "Authorization callback state did not match.",
138
+ hint: "Retry login and only approve the browser window opened for this request."
139
+ };
140
+ }
141
+ if (callback.error) {
142
+ return {
143
+ ...baseResult,
144
+ authenticated: false,
145
+ browser_opened: browserOpened,
146
+ open_browser_error: openBrowserError,
147
+ authorize_url: authorizeUrl,
148
+ callback_url: callbackUrl,
149
+ callback_port: listener.port,
150
+ display_code: displayCode,
151
+ expires_in_seconds: Math.floor(timeoutMs / 1000),
152
+ error: callback.error_description || callback.error
153
+ };
154
+ }
155
+ if (!callback.code) {
156
+ return {
157
+ ...baseResult,
158
+ authenticated: false,
159
+ browser_opened: browserOpened,
160
+ open_browser_error: openBrowserError,
161
+ authorize_url: authorizeUrl,
162
+ callback_url: callbackUrl,
163
+ callback_port: listener.port,
164
+ display_code: displayCode,
165
+ expires_in_seconds: Math.floor(timeoutMs / 1000),
166
+ error: "Authorization callback did not include a code."
167
+ };
168
+ }
169
+ throwIfAborted(signal);
170
+ const exchanged = await exchangeCode({
171
+ baseUrl: config.baseUrl,
172
+ code: callback.code,
173
+ codeVerifier: pkce.codeVerifier,
174
+ redirectPort: listener.port,
175
+ hostname,
176
+ userAgent,
177
+ fetchImpl
178
+ });
179
+ if (!exchanged.key) {
180
+ return {
181
+ ...baseResult,
182
+ authenticated: false,
183
+ browser_opened: browserOpened,
184
+ open_browser_error: openBrowserError,
185
+ authorize_url: authorizeUrl,
186
+ callback_url: callbackUrl,
187
+ callback_port: listener.port,
188
+ display_code: displayCode,
189
+ expires_in_seconds: Math.floor(timeoutMs / 1000),
190
+ error: "RunAPI did not return an API key."
191
+ };
192
+ }
193
+ throwIfAborted(signal);
194
+ await writeConfigApiKey(configFile, exchanged.key);
195
+ try {
196
+ await new RunApiClient({ apiKey: exchanged.key, baseUrl: config.baseUrl }, fetchImpl, userAgent).balance();
197
+ }
198
+ catch (error) {
199
+ return {
200
+ ...baseResult,
201
+ authenticated: false,
202
+ source: "config",
203
+ wrote_config: true,
204
+ verified: false,
205
+ browser_opened: browserOpened,
206
+ open_browser_error: openBrowserError,
207
+ authorize_url: authorizeUrl,
208
+ callback_url: callbackUrl,
209
+ callback_port: listener.port,
210
+ display_code: displayCode,
211
+ expires_in_seconds: Math.floor(timeoutMs / 1000),
212
+ user: exchanged.user,
213
+ token_name: exchanged.name,
214
+ error: friendlyError(error),
215
+ hint: "The token was saved, but verification failed. Retry an authenticated tool or run login again."
216
+ };
217
+ }
218
+ return {
219
+ ...baseResult,
220
+ authenticated: true,
221
+ source: "config",
222
+ wrote_config: true,
223
+ verified: true,
224
+ browser_opened: browserOpened,
225
+ open_browser_error: openBrowserError,
226
+ authorize_url: authorizeUrl,
227
+ callback_url: callbackUrl,
228
+ callback_port: listener.port,
229
+ display_code: displayCode,
230
+ expires_in_seconds: Math.floor(timeoutMs / 1000),
231
+ user: exchanged.user,
232
+ token_name: exchanged.name
233
+ };
234
+ }
235
+ catch (error) {
236
+ return {
237
+ ...baseResult,
238
+ authenticated: false,
239
+ browser_opened: browserOpened,
240
+ open_browser_error: openBrowserError,
241
+ authorize_url: authorizeUrl,
242
+ callback_url: callbackUrl,
243
+ callback_port: listener?.port,
244
+ display_code: displayCode,
245
+ expires_in_seconds: Math.floor(timeoutMs / 1000),
246
+ error: friendlyLoginError(error)
247
+ };
248
+ }
249
+ finally {
250
+ await listener?.close();
251
+ }
252
+ }
253
+ export function registerLoginTool(server, deps = {}) {
254
+ server.tool("login", "Authenticate RunAPI by opening a browser PKCE login flow and saving the API key to ~/.config/runapi/config.json.", {
255
+ force: z.boolean().default(false).describe("Re-run browser login when the current credential comes from the local config file.")
256
+ }, async ({ force }, extra) => jsonText(await login({ force }, {
257
+ ...deps,
258
+ signal: extra.signal,
259
+ onPending: async (payload) => {
260
+ await notifyPending(deps.onPending, payload);
261
+ await Promise.allSettled([
262
+ extra.sendNotification({
263
+ method: "notifications/message",
264
+ params: {
265
+ level: "notice",
266
+ logger: "runapi.login",
267
+ data: {
268
+ message: "Open this RunAPI login URL in your browser to continue authentication.",
269
+ ...payload
270
+ }
271
+ }
272
+ }),
273
+ extra.sendNotification({
274
+ method: "notifications/progress",
275
+ params: {
276
+ progressToken: extra._meta?.progressToken ?? "runapi-login",
277
+ progress: 0,
278
+ total: payload.expires_in_seconds ?? Math.floor(LOGIN_TIMEOUT_MS / 1000),
279
+ message: `RunAPI login URL: ${payload.authorize_url}`
280
+ }
281
+ })
282
+ ]);
283
+ }
284
+ })));
285
+ }
286
+ export async function openSystemBrowser(url, platform = process.platform, timeoutMs = OPEN_BROWSER_TIMEOUT_MS) {
287
+ const command = browserCommand(url, platform);
288
+ if (!command) {
289
+ throw new Error(`Opening a browser is not supported on ${platform}.`);
290
+ }
291
+ await new Promise((resolve, reject) => {
292
+ let settled = false;
293
+ const child = spawn(command.command, command.args, { stdio: "ignore", shell: false });
294
+ const timeout = setTimeout(() => {
295
+ finish(new Error("Opening the browser timed out."));
296
+ child.kill();
297
+ }, timeoutMs);
298
+ function finish(error) {
299
+ if (settled) {
300
+ return;
301
+ }
302
+ settled = true;
303
+ clearTimeout(timeout);
304
+ if (error) {
305
+ reject(error);
306
+ }
307
+ else {
308
+ resolve();
309
+ }
310
+ }
311
+ child.once("error", finish);
312
+ child.once("close", (code) => {
313
+ if (code === 0) {
314
+ finish();
315
+ }
316
+ else {
317
+ finish(new Error(`${command.command} exited with status ${code ?? "unknown"}.`));
318
+ }
319
+ });
320
+ });
321
+ }
322
+ export function browserCommand(url, platform) {
323
+ switch (platform) {
324
+ case "darwin":
325
+ return { command: "open", args: [url] };
326
+ case "linux":
327
+ return { command: "xdg-open", args: [url] };
328
+ case "win32":
329
+ return { command: "rundll32.exe", args: ["url.dll,FileProtocolHandler", url] };
330
+ default:
331
+ return undefined;
332
+ }
333
+ }
334
+ async function exchangeCode(options) {
335
+ const response = await options.fetchImpl(new URL("/api/v1/cli/exchange", trimBaseUrl(options.baseUrl)), {
336
+ method: "POST",
337
+ headers: {
338
+ accept: "application/json",
339
+ "content-type": "application/json",
340
+ "user-agent": options.userAgent,
341
+ "x-cli-hostname": options.hostname
342
+ },
343
+ body: JSON.stringify({
344
+ code: options.code,
345
+ code_verifier: options.codeVerifier,
346
+ redirect_port: options.redirectPort
347
+ })
348
+ });
349
+ if (!response.ok) {
350
+ throw await errorFromResponse(response);
351
+ }
352
+ return await response.json();
353
+ }
354
+ function buildAuthorizeUrl(baseUrl, params) {
355
+ const url = new URL("/cli/authorize", trimBaseUrl(baseUrl));
356
+ url.searchParams.set("state", params.state);
357
+ url.searchParams.set("code_challenge", params.codeChallenge);
358
+ url.searchParams.set("code_challenge_method", "S256");
359
+ url.searchParams.set("redirect_port", String(params.redirectPort));
360
+ url.searchParams.set("display_code", params.displayCode);
361
+ url.searchParams.set("hostname", params.hostname);
362
+ return url.toString();
363
+ }
364
+ async function writeConfigApiKey(filePath, apiKey) {
365
+ const dir = path.dirname(filePath);
366
+ await fs.promises.mkdir(dir, { recursive: true, mode: 0o700 });
367
+ await chmodIfSupported(dir, 0o700);
368
+ const existing = readConfigObject(filePath);
369
+ const next = {
370
+ ...existing,
371
+ api_key: apiKey
372
+ };
373
+ delete next.apiKey;
374
+ const tmp = path.join(dir, `.config.json.${process.pid}.${Date.now()}.${crypto.randomBytes(6).toString("hex")}.tmp`);
375
+ try {
376
+ await fs.promises.writeFile(tmp, `${JSON.stringify(next, null, 2)}\n`, { mode: 0o600 });
377
+ await chmodIfSupported(tmp, 0o600);
378
+ await fs.promises.rename(tmp, filePath);
379
+ await chmodIfSupported(filePath, 0o600);
380
+ }
381
+ catch (error) {
382
+ await removeTempFile(tmp);
383
+ throw error;
384
+ }
385
+ }
386
+ function readConfigObject(filePath) {
387
+ const parsed = readConfigFile(filePath);
388
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
389
+ }
390
+ function pendingPayload(options) {
391
+ return {
392
+ authorize_url: options.authorizeUrl,
393
+ callback_url: options.callbackUrl,
394
+ callback_port: options.callbackPort,
395
+ display_code: options.displayCode,
396
+ expires_in_seconds: Math.floor(options.timeoutMs / 1000),
397
+ browser_opened: options.browserOpened,
398
+ open_browser_error: options.openBrowserError
399
+ };
400
+ }
401
+ async function notifyPending(onPending, payload) {
402
+ try {
403
+ await onPending?.(payload);
404
+ }
405
+ catch {
406
+ // Best effort only; authentication should continue even if the host cannot
407
+ // surface the manual login URL notification.
408
+ }
409
+ }
410
+ function friendlyLoginError(error) {
411
+ if (error instanceof RunApiClientError) {
412
+ return friendlyError(error);
413
+ }
414
+ if (error instanceof LoginCancelledError) {
415
+ return error.message;
416
+ }
417
+ if (error instanceof Error && error.message === "Timed out waiting for browser authorization.") {
418
+ return error.message;
419
+ }
420
+ return "RunAPI login could not complete.";
421
+ }
422
+ function throwIfAborted(signal) {
423
+ if (signal?.aborted) {
424
+ throw new LoginCancelledError();
425
+ }
426
+ }
427
+ async function withCancellation(promise, signal) {
428
+ if (!signal) {
429
+ return promise;
430
+ }
431
+ throwIfAborted(signal);
432
+ return await new Promise((resolve, reject) => {
433
+ const abort = () => reject(new LoginCancelledError());
434
+ signal.addEventListener("abort", abort, { once: true });
435
+ promise.then(resolve, reject).finally(() => {
436
+ signal.removeEventListener("abort", abort);
437
+ });
438
+ });
439
+ }
440
+ async function withTimeout(promise, timeoutMs, message) {
441
+ let timeout;
442
+ try {
443
+ return await Promise.race([
444
+ promise,
445
+ new Promise((_, reject) => {
446
+ timeout = setTimeout(() => reject(new Error(message)), timeoutMs);
447
+ })
448
+ ]);
449
+ }
450
+ finally {
451
+ clearTimeout(timeout);
452
+ }
453
+ }
454
+ async function removeTempFile(filePath) {
455
+ try {
456
+ await fs.promises.rm(filePath, { force: true });
457
+ }
458
+ catch {
459
+ // Best effort cleanup; preserve the original config write error.
460
+ }
461
+ }
462
+ async function chmodIfSupported(filePath, mode) {
463
+ if (process.platform === "win32") {
464
+ return;
465
+ }
466
+ try {
467
+ await fs.promises.chmod(filePath, mode);
468
+ }
469
+ catch {
470
+ // Best effort only; the login flow should not fail on filesystems that
471
+ // cannot apply POSIX modes.
472
+ }
473
+ }
474
+ async function createLoopbackCallbackListener(options) {
475
+ let settled = false;
476
+ let resolvePayload;
477
+ let rejectPayload;
478
+ let timeout;
479
+ const waitPromise = new Promise((resolve, reject) => {
480
+ resolvePayload = resolve;
481
+ rejectPayload = reject;
482
+ });
483
+ const server = http.createServer((request, response) => {
484
+ const payload = parseCallback(request, serverAddressPort(server));
485
+ if (!payload) {
486
+ writeCallbackHtml(response, 404, "Not found.");
487
+ return;
488
+ }
489
+ if (payload.state !== options.state) {
490
+ writeCallbackHtml(response, 400, "Authorization failed. You can close this tab.");
491
+ return;
492
+ }
493
+ if (payload.error) {
494
+ writeCallbackHtml(response, 400, "Authorization canceled. You can close this tab.");
495
+ settle(payload);
496
+ return;
497
+ }
498
+ writeCallbackHtml(response, 200, "Authorization received. You can close this tab and return to your MCP client.");
499
+ settle(payload);
500
+ });
501
+ const port = await new Promise((resolve, reject) => {
502
+ server.once("error", reject);
503
+ server.listen(0, "127.0.0.1", () => resolve(serverAddressPort(server)));
504
+ });
505
+ timeout = setTimeout(() => {
506
+ settleError(new Error("Timed out waiting for browser authorization."));
507
+ }, options.timeoutMs);
508
+ function settle(payload) {
509
+ if (settled) {
510
+ return;
511
+ }
512
+ settled = true;
513
+ clearTimeout(timeout);
514
+ resolvePayload(payload);
515
+ }
516
+ function settleError(error) {
517
+ if (settled) {
518
+ return;
519
+ }
520
+ settled = true;
521
+ clearTimeout(timeout);
522
+ rejectPayload(error);
523
+ }
524
+ return {
525
+ port,
526
+ wait: () => waitPromise,
527
+ close: async () => {
528
+ clearTimeout(timeout);
529
+ await new Promise((resolve) => {
530
+ server.close(() => resolve());
531
+ });
532
+ }
533
+ };
534
+ }
535
+ function parseCallback(request, port) {
536
+ if (!request.url) {
537
+ return undefined;
538
+ }
539
+ const url = new URL(request.url, `http://127.0.0.1:${port}`);
540
+ if (url.pathname !== "/callback") {
541
+ return undefined;
542
+ }
543
+ return {
544
+ code: url.searchParams.get("code") || undefined,
545
+ state: url.searchParams.get("state") || undefined,
546
+ error: url.searchParams.get("error") || undefined,
547
+ error_description: url.searchParams.get("error_description") || undefined
548
+ };
549
+ }
550
+ function writeCallbackHtml(response, status, message) {
551
+ response.writeHead(status, {
552
+ "content-type": "text/html; charset=utf-8",
553
+ "cache-control": "no-store",
554
+ "access-control-allow-origin": "*"
555
+ });
556
+ response.end(`<!doctype html><html><head><meta charset="utf-8"><title>RunAPI authorization</title></head><body><p>${escapeHtml(message)}</p></body></html>`);
557
+ }
558
+ function serverAddressPort(server) {
559
+ const address = server.address();
560
+ if (!address || typeof address === "string") {
561
+ throw new Error("Unable to determine callback listener port.");
562
+ }
563
+ return address.port;
564
+ }
565
+ function base64Url(bytes) {
566
+ return Buffer.from(bytes).toString("base64url");
567
+ }
568
+ function trimBaseUrl(baseUrl) {
569
+ return baseUrl.replace(/\/+$/, "") || DEFAULT_BASE_URL;
570
+ }
571
+ function escapeHtml(value) {
572
+ return value
573
+ .replace(/&/g, "&amp;")
574
+ .replace(/</g, "&lt;")
575
+ .replace(/>/g, "&gt;")
576
+ .replace(/"/g, "&quot;")
577
+ .replace(/'/g, "&#39;");
578
+ }
579
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { type RunApiConfig } from "./config.js";
2
2
  import type { PollingOptions, RunApiPromptsResponse, RunApiTaskResponse, SearchPromptsParams } from "./types.js";
3
+ type RunApiConfigSource = RunApiConfig | (() => RunApiConfig);
3
4
  export declare class RunApiClient {
4
- private readonly config;
5
+ private readonly configSource;
5
6
  private readonly fetchImpl;
6
7
  private readonly userAgent;
7
- constructor(config?: RunApiConfig, fetchImpl?: typeof fetch, userAgent?: string);
8
+ constructor(configSource?: RunApiConfigSource, fetchImpl?: typeof fetch, userAgent?: string);
8
9
  listModels(): Promise<unknown>;
9
10
  searchPrompts(params?: SearchPromptsParams): Promise<RunApiPromptsResponse>;
10
11
  balance(): Promise<unknown>;
@@ -12,6 +13,8 @@ export declare class RunApiClient {
12
13
  getTask(service: string, taskId: string, action?: string): Promise<RunApiTaskResponse>;
13
14
  pollTask(service: string, taskId: string, action?: string, options?: PollingOptions): Promise<RunApiTaskResponse>;
14
15
  private request;
16
+ private config;
15
17
  }
16
18
  export declare function taskStatus(task?: RunApiTaskResponse): string;
17
19
  export declare function taskIdFromResponse(task: RunApiTaskResponse): string | undefined;
20
+ export {};
@@ -4,11 +4,11 @@ import { errorFromResponse, PollTimeoutError } from "./errors.js";
4
4
  const COMPLETED_STATUSES = new Set(["completed", "complete", "succeeded", "success", "finished"]);
5
5
  const FAILED_STATUSES = new Set(["failed", "error", "canceled", "cancelled", "timeout"]);
6
6
  export class RunApiClient {
7
- config;
7
+ configSource;
8
8
  fetchImpl;
9
9
  userAgent;
10
- constructor(config = loadConfig(), fetchImpl = fetch, userAgent = USER_AGENT) {
11
- this.config = config;
10
+ constructor(configSource = loadConfig, fetchImpl = fetch, userAgent = USER_AGENT) {
11
+ this.configSource = configSource;
12
12
  this.fetchImpl = fetchImpl;
13
13
  this.userAgent = userAgent;
14
14
  }
@@ -62,7 +62,8 @@ export class RunApiClient {
62
62
  throw new PollTimeoutError(`Timed out waiting for RunAPI task ${taskId}. Last status: ${taskStatus(lastTask)}.`);
63
63
  }
64
64
  async request(method, requestPath, options = {}) {
65
- const url = new URL(requestPath, this.config.baseUrl.replace(/\/+$/, ""));
65
+ const config = this.config();
66
+ const url = new URL(requestPath, config.baseUrl.replace(/\/+$/, ""));
66
67
  const headers = {
67
68
  accept: "application/json",
68
69
  "user-agent": this.userAgent,
@@ -72,7 +73,7 @@ export class RunApiClient {
72
73
  headers["content-type"] = "application/json";
73
74
  }
74
75
  if (options.auth !== false) {
75
- headers.authorization = `Bearer ${requireApiKey(this.config)}`;
76
+ headers.authorization = `Bearer ${requireApiKey(config)}`;
76
77
  }
77
78
  const response = await this.fetchImpl(url, {
78
79
  method,
@@ -87,6 +88,9 @@ export class RunApiClient {
87
88
  }
88
89
  return await response.json();
89
90
  }
91
+ config() {
92
+ return typeof this.configSource === "function" ? this.configSource() : this.configSource;
93
+ }
90
94
  }
91
95
  export function taskStatus(task) {
92
96
  const status = task?.status || task?.state || nestedString(task?.data, "status");
@@ -1 +1 @@
1
- {"version":3,"file":"runapi-client.js","sourceRoot":"","sources":["../src/runapi-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runapi-client.js","sourceRoot":"","sources":["../src/runapi-client.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { Contract, InputRule, PricingConfig } from "./types.js";
3
3
  import { RunApiClient } from "./runapi-client.js";
4
+ import { type LoginDependencies } from "./login.js";
4
5
  export type ModelServerTool = {
5
6
  name: string;
6
7
  description: string;
@@ -18,6 +19,7 @@ export type CreateModelServerOptions = {
18
19
  tools: ModelServerTool[];
19
20
  client?: RunApiClient;
20
21
  instructions?: string;
22
+ authTools?: false | LoginDependencies;
21
23
  };
22
24
  export declare function createModelServer(options: CreateModelServerOptions): McpServer;
23
25
  export declare function defaultTimeout(action: string): number;
package/dist/server.js CHANGED
@@ -7,6 +7,7 @@ import { validateParams, zodShapeForFields } from "./schema.js";
7
7
  import { RunApiClient, taskIdFromResponse, taskStatus } from "./runapi-client.js";
8
8
  import { friendlyError } from "./errors.js";
9
9
  import { jsonText } from "./tool-response.js";
10
+ import { registerLoginTool } from "./login.js";
10
11
  // Builds a per-model RunAPI MCP server from injected catalog data — no disk
11
12
  // access. Each tool creates and optionally polls a RunAPI task for its
12
13
  // service/action, validating params against the tool's inputSchema and the
@@ -19,9 +20,13 @@ export function createModelServer(options) {
19
20
  }, {
20
21
  instructions: options.instructions ?? defaultInstructions(lineSlug),
21
22
  capabilities: {
22
- tools: {}
23
+ tools: {},
24
+ logging: {}
23
25
  }
24
26
  });
27
+ if (options.authTools !== false) {
28
+ registerLoginTool(server, typeof options.authTools === "object" ? options.authTools : undefined);
29
+ }
25
30
  for (const tool of tools) {
26
31
  const action = findAction(tool.service, tool.action, contract);
27
32
  const declaredFields = action ? declaredFieldsForAction(action) : {};
@@ -129,7 +134,7 @@ function defaultInstructions(lineSlug) {
129
134
  "2. Confirm before expensive, long-running, or batch requests.",
130
135
  "3. Present results as task ID, status, output URLs, and cost fields when available.",
131
136
  "4. Do not describe generated media as if you inspected it.",
132
- "5. On an API key error, guide the user to configure RUNAPI_API_KEY or ~/.config/runapi/config.json."
137
+ "5. On an API key error, call the login tool for interactive browser auth; headless hosts can use RUNAPI_API_KEY or ~/.config/runapi/config.json."
133
138
  ].join("\n");
134
139
  }
135
140
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runapi.ai/mcp-core",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Reusable core for building RunAPI MCP servers: client, contract/pricing/schema queries, input-rule engine, and a createModelServer factory.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",