Skip to content

Commit 19dc272

Browse files
committed
feat: add mcp-config command for MCP integration
Add new mcp-config command that exports TagoIO tokens and API URLs for MCP (Model Context Protocol) integration. Command returns base64 encoded tokens via environment variables and console output for secure consumption by external applications. Features: - Retrieves tokens from .lock files for specified environments - Base64 encoding for token security - Support for custom API URLs - Environment variable export for programmatic access Usage: tagoio mcp-config [environment]
1 parent c4b5532 commit 19dc272

3 files changed

Lines changed: 64 additions & 1 deletion

File tree

src/commands/mcp-config.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { getEnvironmentConfig } from "../lib/config-file";
2+
import { errorHandler } from "../lib/messages";
3+
import { readToken } from "../lib/token";
4+
5+
/**
6+
* Returns the token and API URL for MCP configuration
7+
* @param environment - Optional environment name, defaults to current environment
8+
*/
9+
function mcpConfig(environment?: string) {
10+
let token: string | undefined;
11+
let apiUrl = "https://api.us-e1.tago.io";
12+
13+
if (environment) {
14+
// Use specific environment
15+
token = readToken(environment);
16+
const config = getEnvironmentConfig(environment);
17+
if (config?.tagoAPIURL) {
18+
apiUrl = config.tagoAPIURL;
19+
}
20+
} else {
21+
// Use default environment
22+
const config = getEnvironmentConfig();
23+
if (!config) {
24+
errorHandler("No environment configured. Run 'tagoio init' or 'tagoio login' first.");
25+
return;
26+
}
27+
28+
token = config.profileToken;
29+
if (config.tagoAPIURL) {
30+
apiUrl = config.tagoAPIURL;
31+
}
32+
}
33+
34+
if (!token) {
35+
errorHandler(`No token found for environment. Run 'tagoio login' first.`);
36+
return;
37+
}
38+
39+
// Encrypt token using base64
40+
const encryptedToken = Buffer.from(token).toString("base64");
41+
42+
// Set environment variables for other applications to read
43+
process.env.TAGOIO_MCP_TOKEN = encryptedToken;
44+
process.env.TAGOIO_MCP_API = apiUrl;
45+
46+
console.log("TOKEN and API exported.");
47+
}
48+
49+
export { mcpConfig };

src/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { dashboardCommands } from "./commands/dashboard";
99
import { deviceCommands } from "./commands/devices";
1010
import { listEnvironment } from "./commands/list-env";
1111
import { tagoLogin } from "./commands/login";
12+
import { mcpConfig } from "./commands/mcp-config";
1213
import { profileCommands } from "./commands/profile";
1314
import { setEnvironment } from "./commands/set-env";
1415
import { startConfig } from "./commands/start-config";
@@ -133,6 +134,19 @@ Example:
133134
$ tagoio list-env`,
134135
);
135136

137+
program
138+
.command("mcp-config")
139+
.description("get token and API URL for MCP configuration")
140+
.argument("[environment]", "name of the environment", defaultEnvironment)
141+
.action(mcpConfig)
142+
.addHelpText(
143+
"after",
144+
`
145+
Example:
146+
$ tagoio mcp-config
147+
$ tagoio mcp-config dev`,
148+
);
149+
136150
await getAllCommands(program);
137151

138152
program.parse();

tsconfig.tsbuildinfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"root":["./src/index.ts","./src/commands/list-env.ts","./src/commands/login.ts","./src/commands/set-env.ts","./src/commands/start-config.ts","./src/commands/analysis/analysis-console.ts","./src/commands/analysis/analysis-set-mode.ts","./src/commands/analysis/deploy.ts","./src/commands/analysis/duplicate-analysis.ts","./src/commands/analysis/index.ts","./src/commands/analysis/run-analysis.test.ts","./src/commands/analysis/run-analysis.ts","./src/commands/analysis/trigger-analysis.ts","./src/commands/dashboard/copy-tab.ts","./src/commands/dashboard/index.ts","./src/commands/devices/change-bucket-type.ts","./src/commands/devices/change-network.ts","./src/commands/devices/copy-data.ts","./src/commands/devices/data-get.test.ts","./src/commands/devices/data-get.ts","./src/commands/devices/data-post.ts","./src/commands/devices/device-bkp.ts","./src/commands/devices/device-info.ts","./src/commands/devices/device-list.ts","./src/commands/devices/device-live-inspector.ts","./src/commands/devices/index.ts","./src/commands/profile/index.ts","./src/commands/profile/export/collect-ids.ts","./src/commands/profile/export/export-setup.ts","./src/commands/profile/export/export.ts","./src/commands/profile/export/types.ts","./src/commands/profile/export/services/access-export.ts","./src/commands/profile/export/services/actions-export.ts","./src/commands/profile/export/services/analysis-export.ts","./src/commands/profile/export/services/collect-ids.test.ts","./src/commands/profile/export/services/collect-ids.ts","./src/commands/profile/export/services/dashboards-export.ts","./src/commands/profile/export/services/devices-export.ts","./src/commands/profile/export/services/dictionary-export.ts","./src/commands/profile/export/services/run-buttons-export.test.ts","./src/commands/profile/export/services/run-buttons-export.ts","./src/commands/profile/export/services/widgets-export.ts","./src/commands/profile/export/services/export-backup/export-backup.ts","./src/lib/add-https-to-url.ts","./src/lib/add-to-gitignore.ts","./src/lib/commander-repeatable.ts","./src/lib/compare.ts","./src/lib/config-file.ts","./src/lib/configure-help.ts","./src/lib/current-runtime.ts","./src/lib/dotenv-config.ts","./src/lib/get-current-folder.ts","./src/lib/messages.ts","./src/lib/notify-update.ts","./src/lib/replace-obj.ts","./src/lib/search-name.ts","./src/lib/token.ts","./src/prompt/choose-analysis-from-tagoio.ts","./src/prompt/choose-analysis-list-config.ts","./src/prompt/choose-from-list.ts","./src/prompt/confirm-analysis-list.ts","./src/prompt/confirm.ts","./src/prompt/date-prompt.ts","./src/prompt/number-prompt.ts","./src/prompt/pick-analysis-from-config.ts","./src/prompt/pick-analysis-from-tagoio.ts","./src/prompt/pick-dashboard-id-from-tagoio.ts","./src/prompt/pick-device-id-from-tagoio.ts","./src/prompt/pick-environment.ts","./src/prompt/pick-files-from-tagoio.ts","./src/prompt/pick-from-list.ts","./src/prompt/text-prompt.ts"],"version":"5.9.2"}
1+
{"root":["./src/index.ts","./src/commands/list-env.ts","./src/commands/login.ts","./src/commands/mcp-config.ts","./src/commands/set-env.ts","./src/commands/start-config.ts","./src/commands/analysis/analysis-console.ts","./src/commands/analysis/analysis-set-mode.ts","./src/commands/analysis/deploy.ts","./src/commands/analysis/duplicate-analysis.ts","./src/commands/analysis/index.ts","./src/commands/analysis/run-analysis.test.ts","./src/commands/analysis/run-analysis.ts","./src/commands/analysis/trigger-analysis.ts","./src/commands/dashboard/copy-tab.ts","./src/commands/dashboard/index.ts","./src/commands/devices/change-bucket-type.ts","./src/commands/devices/change-network.ts","./src/commands/devices/copy-data.ts","./src/commands/devices/data-get.test.ts","./src/commands/devices/data-get.ts","./src/commands/devices/data-post.ts","./src/commands/devices/device-bkp.ts","./src/commands/devices/device-info.ts","./src/commands/devices/device-list.ts","./src/commands/devices/device-live-inspector.ts","./src/commands/devices/index.ts","./src/commands/profile/index.ts","./src/commands/profile/export/collect-ids.ts","./src/commands/profile/export/export-setup.ts","./src/commands/profile/export/export.ts","./src/commands/profile/export/types.ts","./src/commands/profile/export/services/access-export.ts","./src/commands/profile/export/services/actions-export.ts","./src/commands/profile/export/services/analysis-export.ts","./src/commands/profile/export/services/collect-ids.test.ts","./src/commands/profile/export/services/collect-ids.ts","./src/commands/profile/export/services/dashboards-export.ts","./src/commands/profile/export/services/devices-export.ts","./src/commands/profile/export/services/dictionary-export.ts","./src/commands/profile/export/services/run-buttons-export.test.ts","./src/commands/profile/export/services/run-buttons-export.ts","./src/commands/profile/export/services/widgets-export.ts","./src/commands/profile/export/services/export-backup/export-backup.ts","./src/lib/add-https-to-url.ts","./src/lib/add-to-gitignore.ts","./src/lib/commander-repeatable.ts","./src/lib/compare.ts","./src/lib/config-file.ts","./src/lib/configure-help.ts","./src/lib/current-runtime.ts","./src/lib/dotenv-config.ts","./src/lib/get-current-folder.ts","./src/lib/messages.ts","./src/lib/notify-update.ts","./src/lib/replace-obj.ts","./src/lib/search-name.ts","./src/lib/token.ts","./src/prompt/choose-analysis-from-tagoio.ts","./src/prompt/choose-analysis-list-config.ts","./src/prompt/choose-from-list.ts","./src/prompt/confirm-analysis-list.ts","./src/prompt/confirm.ts","./src/prompt/date-prompt.ts","./src/prompt/number-prompt.ts","./src/prompt/pick-analysis-from-config.ts","./src/prompt/pick-analysis-from-tagoio.ts","./src/prompt/pick-dashboard-id-from-tagoio.ts","./src/prompt/pick-device-id-from-tagoio.ts","./src/prompt/pick-environment.ts","./src/prompt/pick-files-from-tagoio.ts","./src/prompt/pick-from-list.ts","./src/prompt/text-prompt.ts"],"version":"5.9.2"}

0 commit comments

Comments
 (0)