@transita/mcp-server 0.1.1 → 0.1.2
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 +5 -4
- package/dist/api.js +1 -1
- package/dist/cli.js +0 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.js +5 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/programme-status.d.ts +2 -0
- package/dist/tools/programme-status.js +33 -0
- package/dist/tools/programme-status.js.map +1 -0
- package/dist/tools/visa-details.js +3 -1
- package/dist/tools/visa-details.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -68,6 +68,7 @@ Use the same pattern — `command: npx`, `args: ["-y", "@transita/mcp-server"]`.
|
|
|
68
68
|
| `transita_compare_visas` | Side-by-side comparison of 2-3 visa pathways with deltas (fastest processing, lowest cost, longest validity, PR path). |
|
|
69
69
|
| `transita_country_overview` | Country-level summary: number of visa pathways, EU membership, score dimensions, drawbacks, top cities with rent ranges, PR/citizenship timelines. |
|
|
70
70
|
| `transita_search_by_nationality` | Curated top destinations and recommended visas for citizens of a given country. Best first stop for "where should I move?" |
|
|
71
|
+
| `transita_programme_status` | Live intake status for round-based programmes: whether the programme is open, the date of the last round, and its cutoff score. |
|
|
71
72
|
|
|
72
73
|
### Resources (4 base + dynamic templates)
|
|
73
74
|
|
|
@@ -107,8 +108,8 @@ Everything this MCP server exposes is **free**. The full document checklist + 30
|
|
|
107
108
|
## Development
|
|
108
109
|
|
|
109
110
|
```bash
|
|
110
|
-
git clone https://github.com/snenenenenenene/transita
|
|
111
|
-
cd transita
|
|
111
|
+
git clone https://github.com/snenenenenenene/transita.git
|
|
112
|
+
cd transita/packages/mcp-server
|
|
112
113
|
bun install
|
|
113
114
|
bun run build
|
|
114
115
|
|
|
@@ -132,7 +133,7 @@ Two-step flow. The MCP Registry stores metadata; npm hosts the artifact.
|
|
|
132
133
|
|
|
133
134
|
```bash
|
|
134
135
|
# 1. Publish to npm (must be on a fresh version; bump in package.json first)
|
|
135
|
-
cd
|
|
136
|
+
cd packages/mcp-server
|
|
136
137
|
bun run build
|
|
137
138
|
npm publish --access public
|
|
138
139
|
|
|
@@ -154,5 +155,5 @@ MIT — see LICENSE.
|
|
|
154
155
|
|
|
155
156
|
- Website: <https://transita.app>
|
|
156
157
|
- MCP landing page: <https://transita.app/mcp>
|
|
157
|
-
- Source: <https://github.com/snenenenenenene/transita
|
|
158
|
+
- Source: <https://github.com/snenenenenenene/transita/tree/main/packages/mcp-server>
|
|
158
159
|
- MCP protocol: <https://modelcontextprotocol.io>
|
package/dist/api.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* dev server during testing.
|
|
9
9
|
*/
|
|
10
10
|
export const API_BASE_URL = process.env.TRANSITA_API_URL?.replace(/\/$/, "") ?? "https://transita.app";
|
|
11
|
-
const USER_AGENT = process.env.TRANSITA_MCP_USER_AGENT ?? "transita-mcp-server/0.1.
|
|
11
|
+
const USER_AGENT = process.env.TRANSITA_MCP_USER_AGENT ?? "transita-mcp-server/0.1.2";
|
|
12
12
|
export async function fetchJson(path, opts = {}) {
|
|
13
13
|
const url = `${API_BASE_URL}${path}`;
|
|
14
14
|
const init = {
|
package/dist/cli.js
CHANGED
|
File without changes
|
package/dist/server.d.ts
CHANGED
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
10
10
|
export declare const SERVER_NAME = "transita";
|
|
11
|
-
export declare const SERVER_VERSION = "0.1.
|
|
11
|
+
export declare const SERVER_VERSION = "0.1.2";
|
|
12
12
|
export declare function createTransitaMcpServer(): McpServer;
|
package/dist/server.js
CHANGED
|
@@ -12,20 +12,23 @@ import { registerVisaDetails } from "./tools/visa-details.js";
|
|
|
12
12
|
import { registerCompareVisas } from "./tools/compare-visas.js";
|
|
13
13
|
import { registerCountryOverview } from "./tools/country-overview.js";
|
|
14
14
|
import { registerSearchByNationality } from "./tools/search-by-nationality.js";
|
|
15
|
+
import { registerProgrammeStatus } from "./tools/programme-status.js";
|
|
15
16
|
import { registerResources } from "./resources/index.js";
|
|
16
17
|
import { registerPrompts } from "./prompts/index.js";
|
|
17
18
|
export const SERVER_NAME = "transita";
|
|
18
|
-
export const SERVER_VERSION = "0.1.
|
|
19
|
+
export const SERVER_VERSION = "0.1.2";
|
|
19
20
|
export function createTransitaMcpServer() {
|
|
20
21
|
const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, {
|
|
21
22
|
capabilities: { tools: {}, resources: {}, prompts: {}, logging: {} },
|
|
22
|
-
|
|
23
|
+
// $49 = keep in sync with apps/web/src/lib/pricing.ts PLAN_PRICE_USD
|
|
24
|
+
instructions: "Transita scores immigration eligibility across 100+ visa pathways spanning 15+ countries. Start by calling transita_match_visas with the user's profile, or transita_search_by_nationality if they only know their citizenship. Use transita_visa_details and transita_compare_visas to drill in. Before recommending a round-based pathway (Express Entry, AU SkillSelect, US H-1B), call transita_programme_status to confirm it is currently open and see the last cutoff score. The full document checklist + 30-day plan is paid ($49) and lives at https://transita.app/visa/<id>.",
|
|
23
25
|
});
|
|
24
26
|
registerMatchVisas(server);
|
|
25
27
|
registerVisaDetails(server);
|
|
26
28
|
registerCompareVisas(server);
|
|
27
29
|
registerCountryOverview(server);
|
|
28
30
|
registerSearchByNationality(server);
|
|
31
|
+
registerProgrammeStatus(server);
|
|
29
32
|
registerResources(server);
|
|
30
33
|
registerPrompts(server);
|
|
31
34
|
return server;
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,MAAM,UAAU,uBAAuB;IACrC,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,EAC9C;QACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpE,YAAY,EACV
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,MAAM,UAAU,uBAAuB;IACrC,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,EAC9C;QACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpE,qEAAqE;QACrE,YAAY,EACV,0jBAA0jB;KAC7jB,CACF,CAAC;IAEF,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;IAExB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod/v3";
|
|
2
|
+
import { fetchJson } from "../api.js";
|
|
3
|
+
const isoDate = (v) => v ? new Date(v).toISOString().slice(0, 10) : null;
|
|
4
|
+
export function registerProgrammeStatus(server) {
|
|
5
|
+
server.registerTool("transita_programme_status", {
|
|
6
|
+
title: "Programme status (is this visa open now?)",
|
|
7
|
+
description: "Check the live intake status of a single visa pathway: whether it is currently open, the last selection round and cutoff score (for round-based programmes like Express Entry, AU SkillSelect, or the US H-1B lottery), what is expected next, and the official source. Call this before recommending a pathway so you never send a user toward a closed or paused programme. Continuous-intake visas return an 'open' status.",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
visa_id: z
|
|
10
|
+
.string()
|
|
11
|
+
.describe("Transita visa id, e.g. 'ca-cec', 'us-h1b'. Use transita_match_visas or the transita://visas resource to discover ids."),
|
|
12
|
+
},
|
|
13
|
+
}, async ({ visa_id }) => {
|
|
14
|
+
const s = await fetchJson(`/api/programme-status?visaId=${encodeURIComponent(visa_id)}`);
|
|
15
|
+
const lines = [
|
|
16
|
+
`${s.countryFlag} ${s.countryName}: ${s.visaName} (${s.code})`,
|
|
17
|
+
`Programme: ${s.displayName}`,
|
|
18
|
+
`Status: ${s.status.toUpperCase()}`,
|
|
19
|
+
s.lastEventSummary ? `Latest: ${s.lastEventSummary}` : null,
|
|
20
|
+
s.lastEventAt ? `Last event: ${isoDate(s.lastEventAt)}` : null,
|
|
21
|
+
s.lastCutoffScore != null ? `Last cutoff score: ${s.lastCutoffScore}` : null,
|
|
22
|
+
s.nextExpected ? `Next expected: ${s.nextExpected}` : null,
|
|
23
|
+
`Source: ${s.sourceUrl}`,
|
|
24
|
+
`Data fetched: ${isoDate(s.fetchedAt)}`,
|
|
25
|
+
`Full pathway: https://transita.app/path/${s.visaId}`,
|
|
26
|
+
].filter(Boolean);
|
|
27
|
+
return {
|
|
28
|
+
content: [{ type: "text", text: lines.join("\n") }],
|
|
29
|
+
structuredContent: s,
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=programme-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"programme-status.js","sourceRoot":"","sources":["../../src/tools/programme-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAkBtC,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAClD,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAEpD,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,KAAK,EAAE,2CAA2C;QAClD,WAAW,EACT,gaAAga;QACla,WAAW,EAAE;YACX,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,CACP,uHAAuH,CACxH;SACJ;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,CAAC,GAAG,MAAM,SAAS,CACvB,gCAAgC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAC9D,CAAC;QAEF,MAAM,KAAK,GAAG;YACZ,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG;YAC9D,cAAc,CAAC,CAAC,WAAW,EAAE;YAC7B,WAAW,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;YACnC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI;YAC3D,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;YAC9D,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI;YAC5E,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI;YAC1D,WAAW,CAAC,CAAC,SAAS,EAAE;YACxB,iBAAiB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;YACvC,2CAA2C,CAAC,CAAC,MAAM,EAAE;SACtD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAElB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,iBAAiB,EAAE,CAAuC;SAC3D,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -3,7 +3,9 @@ import { fetchJson } from "../api.js";
|
|
|
3
3
|
export function registerVisaDetails(server) {
|
|
4
4
|
server.registerTool("transita_visa_details", {
|
|
5
5
|
title: "Visa details",
|
|
6
|
-
description:
|
|
6
|
+
description:
|
|
7
|
+
// $49 = keep in sync with apps/web/src/lib/pricing.ts PLAN_PRICE_USD
|
|
8
|
+
"Fetch full details for a single visa pathway: eligibility category, processing time, fees, validity, PR timeline, and a free preview of the document checklist (lead time, ancillary cost, first section). The full multi-section checklist is part of Transita's $49 paid action plan.",
|
|
7
9
|
inputSchema: {
|
|
8
10
|
visa_id: z
|
|
9
11
|
.string()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visa-details.js","sourceRoot":"","sources":["../../src/tools/visa-details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAQtC,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,
|
|
1
|
+
{"version":3,"file":"visa-details.js","sourceRoot":"","sources":["../../src/tools/visa-details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAQtC,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW;QACT,qEAAqE;QACrE,yRAAyR;QAC3R,WAAW,EAAE;YACX,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,CACP,iIAAiI,CAClI;SACJ;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,MAAM,SAAS,CAC1B,aAAa,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAC3C,CAAC;QAEF,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChC,MAAM,KAAK,GAAG;YACZ,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG;YAC3D,CAAC,CAAC,WAAW;YACb,EAAE;YACF,aAAa,CAAC,CAAC,QAAQ,EAAE;YACzB,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAC,oBAAoB,CAAC,GAAG,SAAS;YACrF,oBAAoB,CAAC,CAAC,OAAO,MAAM;YACnC,aAAa,CAAC,CAAC,aAAa,UAAU;YACtC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9G,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI;YACnE,oBAAoB,CAAC,CAAC,WAAW,EAAE;YACnC,EAAE;YACF,oCAAoC;YACpC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;YAClC,qBAAqB,CAAC,CAAC,aAAa,EAAE;YACtC,CAAC,CAAC,YAAY;gBACZ,CAAC,CAAC,qBAAqB,CAAC,CAAC,YAAY,CAAC,KAAK,KAAK;oBAC9C,CAAC,CAAC,YAAY,CAAC,IAAI;yBAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;yBACvG,IAAI,CAAC,IAAI,CAAC;gBACf,CAAC,CAAC,IAAI;YACR,CAAC,CAAC,aAAa,GAAG,CAAC;gBACjB,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,CAAC,gDAAgD,CAAC,CAAC,WAAW,EAAE;gBACzF,CAAC,CAAC,IAAI;SACT,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAElB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,iBAAiB,EAAE,IAA0C;SAC9D,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@transita/mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"mcpName": "io.github.snenenenenenene/transita-mcp-server",
|
|
5
|
-
"description": "Model Context Protocol server for Transita
|
|
5
|
+
"description": "Model Context Protocol server for Transita — visa eligibility matcher, country comparisons, and immigration intelligence inside Claude Desktop, Cursor, Cline, and any MCP-compatible AI assistant.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"bin": {
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
"homepage": "https://transita.app/mcp",
|
|
40
40
|
"repository": {
|
|
41
41
|
"type": "git",
|
|
42
|
-
"url": "git+https://github.com/snenenenenenene/transita
|
|
42
|
+
"url": "git+https://github.com/snenenenenenene/transita.git",
|
|
43
|
+
"directory": "packages/mcp-server"
|
|
43
44
|
},
|
|
44
45
|
"engines": {
|
|
45
46
|
"node": ">=20"
|