horizon-mcp 0.0.0-development
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 +138 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/debug-connection.d.ts +3 -0
- package/dist/prompts/debug-connection.d.ts.map +1 -0
- package/dist/prompts/debug-connection.js +17 -0
- package/dist/prompts/debug-connection.js.map +1 -0
- package/dist/prompts/explain-feature.d.ts +3 -0
- package/dist/prompts/explain-feature.d.ts.map +1 -0
- package/dist/prompts/explain-feature.js +32 -0
- package/dist/prompts/explain-feature.js.map +1 -0
- package/dist/prompts/index.d.ts +6 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +14 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/integrate-feature.d.ts +3 -0
- package/dist/prompts/integrate-feature.d.ts.map +1 -0
- package/dist/prompts/integrate-feature.js +35 -0
- package/dist/prompts/integrate-feature.js.map +1 -0
- package/dist/prompts/setup-auth.d.ts +3 -0
- package/dist/prompts/setup-auth.d.ts.map +1 -0
- package/dist/prompts/setup-auth.js +26 -0
- package/dist/prompts/setup-auth.js.map +1 -0
- package/dist/resources/index.d.ts +6 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +208 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +15 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/__tests__/api-client.test.d.ts +2 -0
- package/dist/tools/__tests__/api-client.test.d.ts.map +1 -0
- package/dist/tools/__tests__/api-client.test.js +156 -0
- package/dist/tools/__tests__/api-client.test.js.map +1 -0
- package/dist/tools/api-client.d.ts +25 -0
- package/dist/tools/api-client.d.ts.map +1 -0
- package/dist/tools/api-client.js +78 -0
- package/dist/tools/api-client.js.map +1 -0
- package/dist/tools/auth.d.ts +3 -0
- package/dist/tools/auth.d.ts.map +1 -0
- package/dist/tools/auth.js +123 -0
- package/dist/tools/auth.js.map +1 -0
- package/dist/tools/cloud-save.d.ts +3 -0
- package/dist/tools/cloud-save.d.ts.map +1 -0
- package/dist/tools/cloud-save.js +50 -0
- package/dist/tools/cloud-save.js.map +1 -0
- package/dist/tools/connection.d.ts +3 -0
- package/dist/tools/connection.d.ts.map +1 -0
- package/dist/tools/connection.js +20 -0
- package/dist/tools/connection.js.map +1 -0
- package/dist/tools/feedback.d.ts +3 -0
- package/dist/tools/feedback.d.ts.map +1 -0
- package/dist/tools/feedback.js +36 -0
- package/dist/tools/feedback.js.map +1 -0
- package/dist/tools/gift-codes.d.ts +3 -0
- package/dist/tools/gift-codes.d.ts.map +1 -0
- package/dist/tools/gift-codes.js +52 -0
- package/dist/tools/gift-codes.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +24 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/leaderboard.d.ts +3 -0
- package/dist/tools/leaderboard.d.ts.map +1 -0
- package/dist/tools/leaderboard.js +96 -0
- package/dist/tools/leaderboard.js.map +1 -0
- package/dist/tools/news.d.ts +3 -0
- package/dist/tools/news.d.ts.map +1 -0
- package/dist/tools/news.js +29 -0
- package/dist/tools/news.js.map +1 -0
- package/dist/tools/remote-config.d.ts +3 -0
- package/dist/tools/remote-config.d.ts.map +1 -0
- package/dist/tools/remote-config.js +42 -0
- package/dist/tools/remote-config.js.map +1 -0
- package/dist/tools/tool-helpers.d.ts +24 -0
- package/dist/tools/tool-helpers.d.ts.map +1 -0
- package/dist/tools/tool-helpers.js +54 -0
- package/dist/tools/tool-helpers.js.map +1 -0
- package/dist/tools/user-logs.d.ts +3 -0
- package/dist/tools/user-logs.d.ts.map +1 -0
- package/dist/tools/user-logs.js +30 -0
- package/dist/tools/user-logs.js.map +1 -0
- package/package.json +52 -0
- package/src/resources/api/app-api.md +495 -0
- package/src/resources/docs/auth.md +280 -0
- package/src/resources/docs/cloud-save.md +180 -0
- package/src/resources/docs/feedback.md +126 -0
- package/src/resources/docs/gift-codes.md +153 -0
- package/src/resources/docs/leaderboard.md +201 -0
- package/src/resources/docs/news.md +114 -0
- package/src/resources/docs/overview.md +80 -0
- package/src/resources/docs/remote-config.md +149 -0
- package/src/resources/docs/user-logs.md +144 -0
- package/src/resources/quickstart/godot.md +224 -0
- package/src/resources/quickstart/unity.md +317 -0
- package/src/resources/quickstart/unreal.md +390 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gift-codes.js","sourceRoot":"","sources":["../../src/tools/gift-codes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAElF,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,6BAA6B;IAC7B,MAAM,CAAC,YAAY,CAAC,4BAA4B,EAAE;QAChD,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,wGAAwG;QAC1G,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACrD;KACF,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,gBAAgB,EAAE,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;gBAClE,IAAI;gBACJ,MAAM;aACP,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CAAC,0BAA0B,EAAE;QAC9C,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,oDAAoD;QACtD,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC5E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACrD;KACF,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,gBAAgB,EAAE,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBAChE,IAAI;gBACJ,MAAM;aACP,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWpE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAUxD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { registerConnectionTools } from "./connection.js";
|
|
2
|
+
import { registerAuthTools } from "./auth.js";
|
|
3
|
+
import { registerLeaderboardTools } from "./leaderboard.js";
|
|
4
|
+
import { registerCloudSaveTools } from "./cloud-save.js";
|
|
5
|
+
import { registerRemoteConfigTools } from "./remote-config.js";
|
|
6
|
+
import { registerNewsTools } from "./news.js";
|
|
7
|
+
import { registerGiftCodeTools } from "./gift-codes.js";
|
|
8
|
+
import { registerFeedbackTools } from "./feedback.js";
|
|
9
|
+
import { registerUserLogTools } from "./user-logs.js";
|
|
10
|
+
/**
|
|
11
|
+
* Registers all horizOn MCP tools on the given server.
|
|
12
|
+
*/
|
|
13
|
+
export function registerAllTools(server) {
|
|
14
|
+
registerConnectionTools(server);
|
|
15
|
+
registerAuthTools(server);
|
|
16
|
+
registerLeaderboardTools(server);
|
|
17
|
+
registerCloudSaveTools(server);
|
|
18
|
+
registerRemoteConfigTools(server);
|
|
19
|
+
registerNewsTools(server);
|
|
20
|
+
registerGiftCodeTools(server);
|
|
21
|
+
registerFeedbackTools(server);
|
|
22
|
+
registerUserLogTools(server);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaderboard.d.ts","sourceRoot":"","sources":["../../src/tools/leaderboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8FhE"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { createApiClientFromEnv } from "./api-client.js";
|
|
3
|
+
import { noApiKeyResponse, errorResponse, jsonResponse } from "./tool-helpers.js";
|
|
4
|
+
export function registerLeaderboardTools(server) {
|
|
5
|
+
// --- Submit score ---
|
|
6
|
+
server.registerTool("horizon_submit_score", {
|
|
7
|
+
title: "Submit Score",
|
|
8
|
+
description: "Submits a score to the horizOn leaderboard for a given user.",
|
|
9
|
+
inputSchema: {
|
|
10
|
+
userId: z.string().uuid().describe("User ID (UUID)"),
|
|
11
|
+
score: z.number().int().min(0).describe("Score to submit (non-negative integer)"),
|
|
12
|
+
},
|
|
13
|
+
}, async ({ userId, score }) => {
|
|
14
|
+
const client = createApiClientFromEnv();
|
|
15
|
+
if (!client)
|
|
16
|
+
return noApiKeyResponse();
|
|
17
|
+
try {
|
|
18
|
+
const result = await client.post("/api/v1/app/leaderboard/submit", {
|
|
19
|
+
userId,
|
|
20
|
+
score,
|
|
21
|
+
});
|
|
22
|
+
return jsonResponse(result);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return errorResponse(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
// --- Get leaderboard top ---
|
|
29
|
+
server.registerTool("horizon_get_leaderboard_top", {
|
|
30
|
+
title: "Get Leaderboard Top",
|
|
31
|
+
description: "Gets the top entries from the horizOn leaderboard.",
|
|
32
|
+
inputSchema: {
|
|
33
|
+
userId: z.string().uuid().describe("User ID (UUID)"),
|
|
34
|
+
limit: z.number().int().min(1).max(100).default(10).describe("Number of top entries to return (1-100, default 10)"),
|
|
35
|
+
},
|
|
36
|
+
}, async ({ userId, limit }) => {
|
|
37
|
+
const client = createApiClientFromEnv();
|
|
38
|
+
if (!client)
|
|
39
|
+
return noApiKeyResponse();
|
|
40
|
+
try {
|
|
41
|
+
const result = await client.get("/api/v1/app/leaderboard/top", {
|
|
42
|
+
userId,
|
|
43
|
+
limit: String(limit),
|
|
44
|
+
});
|
|
45
|
+
return jsonResponse(result);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
return errorResponse(error);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
// --- Get user rank ---
|
|
52
|
+
server.registerTool("horizon_get_user_rank", {
|
|
53
|
+
title: "Get User Rank",
|
|
54
|
+
description: "Gets the rank of a specific user on the horizOn leaderboard.",
|
|
55
|
+
inputSchema: {
|
|
56
|
+
userId: z.string().uuid().describe("User ID (UUID)"),
|
|
57
|
+
},
|
|
58
|
+
}, async ({ userId }) => {
|
|
59
|
+
const client = createApiClientFromEnv();
|
|
60
|
+
if (!client)
|
|
61
|
+
return noApiKeyResponse();
|
|
62
|
+
try {
|
|
63
|
+
const result = await client.get("/api/v1/app/leaderboard/rank", {
|
|
64
|
+
userId,
|
|
65
|
+
});
|
|
66
|
+
return jsonResponse(result);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
return errorResponse(error);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
// --- Get leaderboard around user ---
|
|
73
|
+
server.registerTool("horizon_get_leaderboard_around", {
|
|
74
|
+
title: "Get Leaderboard Around User",
|
|
75
|
+
description: "Gets leaderboard entries around a specific user's position on horizOn.",
|
|
76
|
+
inputSchema: {
|
|
77
|
+
userId: z.string().uuid().describe("User ID (UUID)"),
|
|
78
|
+
range: z.number().int().min(1).max(50).default(10).describe("Number of entries around the user (1-50, default 10)"),
|
|
79
|
+
},
|
|
80
|
+
}, async ({ userId, range }) => {
|
|
81
|
+
const client = createApiClientFromEnv();
|
|
82
|
+
if (!client)
|
|
83
|
+
return noApiKeyResponse();
|
|
84
|
+
try {
|
|
85
|
+
const result = await client.get("/api/v1/app/leaderboard/around", {
|
|
86
|
+
userId,
|
|
87
|
+
range: String(range),
|
|
88
|
+
});
|
|
89
|
+
return jsonResponse(result);
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
return errorResponse(error);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=leaderboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaderboard.js","sourceRoot":"","sources":["../../src/tools/leaderboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"news.d.ts","sourceRoot":"","sources":["../../src/tools/news.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwBzD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { createApiClientFromEnv } from "./api-client.js";
|
|
3
|
+
import { noApiKeyResponse, errorResponse, jsonResponse } from "./tool-helpers.js";
|
|
4
|
+
export function registerNewsTools(server) {
|
|
5
|
+
server.registerTool("horizon_get_news", {
|
|
6
|
+
title: "Get News",
|
|
7
|
+
description: "Gets news articles from horizOn with optional language filtering.",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
limit: z.number().int().min(0).max(100).default(20).describe("Number of news items to return (0-100, default 20)"),
|
|
10
|
+
languageCode: z.string().length(2).optional().describe("ISO 639-1 language code (2 characters, e.g. 'en')"),
|
|
11
|
+
},
|
|
12
|
+
}, async ({ limit, languageCode }) => {
|
|
13
|
+
const client = createApiClientFromEnv();
|
|
14
|
+
if (!client)
|
|
15
|
+
return noApiKeyResponse();
|
|
16
|
+
try {
|
|
17
|
+
const params = { limit: String(limit) };
|
|
18
|
+
if (languageCode) {
|
|
19
|
+
params.languageCode = languageCode;
|
|
20
|
+
}
|
|
21
|
+
const result = await client.get("/api/v1/app/news", params);
|
|
22
|
+
return jsonResponse(result);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return errorResponse(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=news.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"news.js","sourceRoot":"","sources":["../../src/tools/news.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAElF,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE;QACtC,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,mEAAmE;QACrE,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YAClH,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;SAC5G;KACF,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,gBAAgB,EAAE,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,MAAM,GAA2B,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;YACrC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YAC5D,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-config.d.ts","sourceRoot":"","sources":["../../src/tools/remote-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsCjE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { createApiClientFromEnv } from "./api-client.js";
|
|
3
|
+
import { noApiKeyResponse, errorResponse, jsonResponse } from "./tool-helpers.js";
|
|
4
|
+
export function registerRemoteConfigTools(server) {
|
|
5
|
+
// --- Get single remote config ---
|
|
6
|
+
server.registerTool("horizon_get_remote_config", {
|
|
7
|
+
title: "Get Remote Config",
|
|
8
|
+
description: "Gets a single remote configuration value by key from horizOn.",
|
|
9
|
+
inputSchema: {
|
|
10
|
+
key: z.string().max(256).describe("Configuration key (max 256 characters)"),
|
|
11
|
+
},
|
|
12
|
+
}, async ({ key }) => {
|
|
13
|
+
const client = createApiClientFromEnv();
|
|
14
|
+
if (!client)
|
|
15
|
+
return noApiKeyResponse();
|
|
16
|
+
try {
|
|
17
|
+
const encodedKey = encodeURIComponent(key);
|
|
18
|
+
const result = await client.get(`/api/v1/app/remote-config/${encodedKey}`);
|
|
19
|
+
return jsonResponse(result);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
return errorResponse(error);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
// --- Get all remote configs ---
|
|
26
|
+
server.registerTool("horizon_get_all_remote_configs", {
|
|
27
|
+
title: "Get All Remote Configs",
|
|
28
|
+
description: "Gets all remote configuration values from horizOn.",
|
|
29
|
+
}, async () => {
|
|
30
|
+
const client = createApiClientFromEnv();
|
|
31
|
+
if (!client)
|
|
32
|
+
return noApiKeyResponse();
|
|
33
|
+
try {
|
|
34
|
+
const result = await client.get("/api/v1/app/remote-config/all");
|
|
35
|
+
return jsonResponse(result);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
return errorResponse(error);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=remote-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-config.js","sourceRoot":"","sources":["../../src/tools/remote-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAElF,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,mCAAmC;IACnC,MAAM,CAAC,YAAY,CAAC,2BAA2B,EAAE;QAC/C,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,+DAA+D;QACjE,WAAW,EAAE;YACX,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SAC5E;KACF,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,gBAAgB,EAAE,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC;YAC3E,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,iCAAiC;IACjC,MAAM,CAAC,YAAY,CAAC,gCAAgC,EAAE;QACpD,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,oDAAoD;KACvD,EAAE,KAAK,IAAI,EAAE;QACZ,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,gBAAgB,EAAE,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YACjE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for tool handlers.
|
|
3
|
+
*/
|
|
4
|
+
type ToolContent = {
|
|
5
|
+
type: "text";
|
|
6
|
+
text: string;
|
|
7
|
+
};
|
|
8
|
+
type ToolResult = {
|
|
9
|
+
content: ToolContent[];
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Returns a tool result telling the user to set HORIZON_API_KEY.
|
|
13
|
+
*/
|
|
14
|
+
export declare function noApiKeyResponse(): ToolResult;
|
|
15
|
+
/**
|
|
16
|
+
* Returns a formatted error tool result.
|
|
17
|
+
*/
|
|
18
|
+
export declare function errorResponse(error: unknown): ToolResult;
|
|
19
|
+
/**
|
|
20
|
+
* Returns a successful tool result with JSON-formatted data.
|
|
21
|
+
*/
|
|
22
|
+
export declare function jsonResponse(data: unknown): ToolResult;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=tool-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../../src/tools/tool-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAClD,KAAK,UAAU,GAAG;IAAE,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AAE7C;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAS7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAkBxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAStD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for tool handlers.
|
|
3
|
+
*/
|
|
4
|
+
import { HorizonApiError } from "./api-client.js";
|
|
5
|
+
/**
|
|
6
|
+
* Returns a tool result telling the user to set HORIZON_API_KEY.
|
|
7
|
+
*/
|
|
8
|
+
export function noApiKeyResponse() {
|
|
9
|
+
return {
|
|
10
|
+
content: [
|
|
11
|
+
{
|
|
12
|
+
type: "text",
|
|
13
|
+
text: "HORIZON_API_KEY environment variable is not set. Please set it to your horizOn API key.",
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Returns a formatted error tool result.
|
|
20
|
+
*/
|
|
21
|
+
export function errorResponse(error) {
|
|
22
|
+
let message;
|
|
23
|
+
if (error instanceof HorizonApiError) {
|
|
24
|
+
message = `horizOn API error (HTTP ${error.status}): ${error.body}`;
|
|
25
|
+
}
|
|
26
|
+
else if (error instanceof Error) {
|
|
27
|
+
message = `Error: ${error.message}`;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
message = `Unknown error: ${String(error)}`;
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
content: [
|
|
34
|
+
{
|
|
35
|
+
type: "text",
|
|
36
|
+
text: message,
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Returns a successful tool result with JSON-formatted data.
|
|
43
|
+
*/
|
|
44
|
+
export function jsonResponse(data) {
|
|
45
|
+
return {
|
|
46
|
+
content: [
|
|
47
|
+
{
|
|
48
|
+
type: "text",
|
|
49
|
+
text: JSON.stringify(data, null, 2),
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=tool-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-helpers.js","sourceRoot":"","sources":["../../src/tools/tool-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKlD;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,yFAAyF;aAChG;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAe,CAAC;IACpB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACrC,OAAO,GAAG,2BAA2B,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IACtE,CAAC;SAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAClC,OAAO,GAAG,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,kBAAkB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,OAAO;aACd;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACpC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-logs.d.ts","sourceRoot":"","sources":["../../src/tools/user-logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyB5D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { createApiClientFromEnv } from "./api-client.js";
|
|
3
|
+
import { noApiKeyResponse, errorResponse, jsonResponse } from "./tool-helpers.js";
|
|
4
|
+
export function registerUserLogTools(server) {
|
|
5
|
+
server.registerTool("horizon_create_log", {
|
|
6
|
+
title: "Create Log",
|
|
7
|
+
description: "Creates a user log entry on horizOn with a message, type (INFO/WARN/ERROR), and optional error code.",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
userId: z.string().uuid().describe("User ID (UUID)"),
|
|
10
|
+
message: z.string().max(1000).describe("Log message (max 1000 characters)"),
|
|
11
|
+
type: z.enum(["INFO", "WARN", "ERROR"]).describe("Log level: INFO, WARN, or ERROR"),
|
|
12
|
+
errorCode: z.string().max(50).optional().describe("Error code (max 50 characters)"),
|
|
13
|
+
},
|
|
14
|
+
}, async ({ userId, message, type, errorCode }) => {
|
|
15
|
+
const client = createApiClientFromEnv();
|
|
16
|
+
if (!client)
|
|
17
|
+
return noApiKeyResponse();
|
|
18
|
+
try {
|
|
19
|
+
const body = { userId, message, type };
|
|
20
|
+
if (errorCode !== undefined)
|
|
21
|
+
body.errorCode = errorCode;
|
|
22
|
+
const result = await client.post("/api/v1/app/user-logs/create", body);
|
|
23
|
+
return jsonResponse(result);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
return errorResponse(error);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=user-logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-logs.js","sourceRoot":"","sources":["../../src/tools/user-logs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAElF,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,YAAY,CAAC,oBAAoB,EAAE;QACxC,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,sGAAsG;QACxG,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACpD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAC3E,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACnF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;SACpF;KACF,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;QAChD,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,gBAAgB,EAAE,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,IAAI,GAA4B,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAChE,IAAI,SAAS,KAAK,SAAS;gBAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAExD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;YACvE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "horizon-mcp",
|
|
3
|
+
"version": "0.0.0-development",
|
|
4
|
+
"description": "MCP server for horizOn Backend-as-a-Service — documentation, live API tools, and workflow prompts for Godot, Unity, and Unreal Engine integration.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"horizon-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"src/resources/**/*.md"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"prepublishOnly": "npm run build",
|
|
17
|
+
"dev": "tsx src/index.ts",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:watch": "vitest"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"mcp",
|
|
23
|
+
"horizon",
|
|
24
|
+
"baas",
|
|
25
|
+
"gamedev",
|
|
26
|
+
"godot",
|
|
27
|
+
"unity",
|
|
28
|
+
"unreal",
|
|
29
|
+
"backend-as-a-service",
|
|
30
|
+
"model-context-protocol"
|
|
31
|
+
],
|
|
32
|
+
"author": "ProjectMakers <contact@projectmakers.de> (https://projectmakers.de)",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/ProjectMakersDE/horizOn-mcp.git"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://horizon.pm",
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=18.0.0"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
44
|
+
"zod": "^3.25.0"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/node": "^22.0.0",
|
|
48
|
+
"tsx": "^4.19.0",
|
|
49
|
+
"typescript": "^5.7.0",
|
|
50
|
+
"vitest": "^3.0.0"
|
|
51
|
+
}
|
|
52
|
+
}
|