### MCP Server Quick Setup (npm) Source: https://developers.chargetrip.com/api-reference/api/quick-setup-guide Quickly set up the MCP server in your application by referencing the NPM package and setting environment variables. ```APIDOC ## MCP Server Quick Setup (npm) ### Description Configure your application to connect to the Chargetrip MCP server by referencing the NPM package and setting your `x-client-id` and `x-app-id` as environment variables. For Github Copilot users, configure an `mcp.json` file in the `.vscode` directory. ### Configuration (`.vscode/mcp.json` for Copilot) ```json { "servers": { "chargetrip-mcp": { "type": "stdio", "command": "npx", "args": ["@chargetrip/mcp"], "env": { "CLIENT_ID": "___YOUR CLIENT ID HERE___", "APP_ID": "___YOUR APP ID HERE___" } } }, "inputs": [] } ``` ``` -------------------------------- ### Example Empty Response Object Source: https://developers.chargetrip.com/api-reference/stations/query-station-tariff-details An example of an empty JSON object, which might be returned in certain scenarios, such as a successful but empty data retrieval. ```json {} ``` -------------------------------- ### Query Station Tariff List Source: https://developers.chargetrip.com/api-reference/stations/query-station-tariffs Retrieves an overview of charging costs and optional setup fees for each station. Pagination is supported. ```APIDOC ## Query Station Tariff List ### Description To get an overview of the charging costs and optional setup fee you can run the query station tariff list. Within this list you will find all costs per station. ### Method GET ### Endpoint /stations/tariffs ### Parameters #### Query Parameters - **size** (Int) - Optional - The number of elements (count) to return. Default: 10 - **page** (Int) - Optional - Page number to return. Default: 0 ### Request Example ``` GET /stations/tariffs?size=20&page=1 ``` ### Response #### Success Response (200) - **tariffs** (Array) - A list of station tariff objects. - **station_id** (String) - The ID of the station. - **currency** (String) - The currency of the tariff. - **cost_per_kwh** (Float) - The cost per kilowatt-hour. - **setup_fee** (Float) - The optional setup fee. #### Response Example ```json { "tariffs": [ { "station_id": "station-123", "currency": "EUR", "cost_per_kwh": 0.25, "setup_fee": 5.00 } ] } ``` ``` -------------------------------- ### Mutate to Start a New Navigation Session Source: https://developers.chargetrip.com/api-reference/api/beta-features Endpoint for starting a new navigation session. ```APIDOC ## Mutate to Start a New Navigation Session ### Description This endpoint initiates a new navigation session, typically after a route has been calculated. ### Method POST ### Endpoint `/navigation/start` ### Request Body * **`routeId`** (string) - Required - The ID of the route to navigate. ### Request Example ```json { "routeId": "route-new-xyz" } ``` ### Response #### Success Response (201) * **`data`** (object) - Details of the started navigation session. * **`sessionId`** (string) - The unique identifier for the navigation session. * **`status`** (string) - The initial status of the session (e.g., "active"). #### Response Example ```json { "data": { "sessionId": "nav-session-123", "status": "active" } } ``` ``` -------------------------------- ### GraphQL Response Structure Example Source: https://developers.chargetrip.com/api-reference/vehicle/query-premium-vehicle-details This example shows a typical JSON response structure for a successful GraphQL query. It includes a 'data' object containing the requested vehicle information. An empty 'data' object is shown as a placeholder when no specific fields are requested or returned. ```json { "data": {} } ``` -------------------------------- ### GraphQL Subscriptions (graphql-ws) Source: https://developers.chargetrip.com/api-reference/api/quick-setup-guide Use the `graphql-ws` protocol for real-time subscriptions via websockets. ```APIDOC ## GraphQL Subscriptions (graphql-ws) ### Description Connect to this URL using the `graphql-ws` protocol for real-time data subscriptions. ### Endpoint `wss://api.chargetrip.io/graphql` ``` -------------------------------- ### GraphQL Integration Source: https://developers.chargetrip.com/api-reference/api/quick-setup-guide Integrate using the GraphQL interface by providing the base URL along with your `x-client-id` and `x-app-id`. ```APIDOC ## GraphQL Integration ### Description Use this base URL to execute all queries and mutations. Subscriptions can be implemented using `graphql-ws` or `graphql-transport-ws` protocols. ### Method POST (for queries and mutations) ### Endpoint `https://api.chargetrip.io/graphql` ### Headers - **x-client-id** (string) - Required - Your client ID - **x-app-id** (string) - Required - Your app ID ### Request Body (Example for a query) ```json { "query": "query { route(from: {lat: 52.370216, lon: 4.895168}, to: {lat: 52.370216, lon: 4.895168}) { id name distance duration chargeTime }}" } ``` ### Response (Example Success) ```json { "data": { "route": { "id": "64f8b5f1a7b3c4d5e6f7a8b9", "name": "Route to destination", "distance": 15000, "duration": 1800, "chargeTime": 30 } } } ``` ``` -------------------------------- ### Initialize Chargetrip API Client and Authentication Source: https://developers.chargetrip.com/examples/routes/preferred-operator Sets up the URQL client for connecting to the Chargetrip GraphQL API. Includes authentication headers and a WebSocket subscription client for real-time updates. Requires an 'x-client-id' and 'x-app-id' for authorization. ```javascript import { createClient, createRequest, defaultExchanges, subscriptionExchange } from '@urql/core'; import { pipe, subscribe } from 'wonka'; import { SubscriptionClient } from 'subscriptions-transport-ws'; // Assuming queries.js contains searchOperatorListQuery, createRouteQuery, routeUpdateSubscription // import { searchOperatorListQuery, createRouteQuery, routeUpdateSubscription } from './queries.js'; const headers = { //Replace this x-client-id and app-id with your own to get access to more cars 'x-client-id': '5ed1175bad06853b3aa1e492', 'x-app-id': '623998b2c35130073829b2d2', }; const subscriptionClient = new SubscriptionClient('wss://api.chargetrip.io/graphql', { reconnect: true, connectionParams: headers, }); const client = createClient({ url: 'https://api.chargetrip.io/graphql', fetchOptions: { method: 'POST', headers, }, exchanges: [ ...defaultExchanges, subscriptionExchange({ forwardSubscription(operation) { return subscriptionClient.request(operation); }, }), ], }); ``` -------------------------------- ### Route Introduction Source: https://developers.chargetrip.com/api-reference/api/beta-features Introduction to the new route planning API endpoints. ```APIDOC ## Route Introduction ### Description This section introduces the updated Chargetrip API endpoints for route planning, offering enhanced features and performance. ``` -------------------------------- ### GraphQL Error Response Example Source: https://developers.chargetrip.com/api-reference/vehicle/query-premium-vehicle-details This example illustrates a JSON response structure when an error occurs during a GraphQL request. It includes an 'errors' object detailing the error type and potential reasons, such as 'OPERATION_NOT_ALLOWED' or 'RATE_LIMIT_EXCEEDED'. ```json { "errors": [ { "message": "OPERATION_NOT_ALLOWED", "extensions": { "code": "OPERATION_NOT_ALLOWED" } } ] } ``` -------------------------------- ### Fetch Route with Custom Battery Capacity using Urql Source: https://developers.chargetrip.com/examples/routes/battery-capacity This example demonstrates how to fetch a route using the Chargetrip API with Urql. It sets a custom battery capacity and subscribes to route updates. Requires an API key for authorization. ```javascript import { SubscriptionClient } from 'subscriptions-transport-ws'; import { createClient, createRequest, defaultExchanges, subscriptionExchange } from '@urql/core'; import { createRoute, routeUpdate } from './queries'; import { pipe, subscribe } from 'wonka'; /** * For the purpose of this example we use urql - lightweights GraphQL client. * To establish a connection with Chargetrip GraphQL API you need to have an API key. * The key in this example is a public one and gives access only to a part of our extensive database. * You need a registered `x-client-id` to access the full database. * Read more about authorisation in our documentation (https://docs.chargetrip.com/#authorisation). */ const headers = { //Replace this x-client-id and app-id with your own to get access to more cars 'x-client-id': '5ed1175bad06853b3aa1e492', 'x-app-id': '623998b2c35130073829b2d2', }; const subscriptionClient = new SubscriptionClient('wss://api.chargetrip.io/graphql', { reconnect: true, connectionParams: headers, }); const client = createClient({ url: 'https://api.chargetrip.io/graphql', fetchOptions: { method: 'POST', headers, }, exchanges: [ ...defaultExchanges, subscriptionExchange({ forwardSubscription(operation) { return subscriptionClient.request(operation); }, }), ], }); /** * The function that makes a route request to the Chargetrip API with the customized battery capacity. * @param { number } capacity - The current battery capacity * @param { function } callback - As soon as our asynchronous call is finished we do a callback to update our UI. */ export const getRoute = (capacity, callback) => { client .mutation(createRoute, { capacity: capacity }) .toPromise() .then(response => { const routeId = response.data.newRoute; const { unsubscribe } = pipe( client.executeSubscription(createRequest(routeUpdate, { id: routeId })), subscribe(result => { const { status, route } = result.data?.routeUpdatedById; // You can keep listening to the route changes to update route information. // For this example we want to only draw the initial route. if (status === 'done' && route) { unsubscribe(); callback(route); } else if (status === 'not_found') { callback(); } }), ); }) .catch(error => console.log(error)); }; ``` -------------------------------- ### Navigation Introduction Source: https://developers.chargetrip.com/api-reference/api/beta-features Introduction to navigation-related API endpoints. ```APIDOC ## Navigation Introduction ### Description This section introduces the Chargetrip API endpoints for managing navigation sessions. ``` -------------------------------- ### Vehicle Range Information Source: https://developers.chargetrip.com/api-reference/vehicle/query-vehicles Get the estimated range of the vehicle. ```APIDOC ## GET /vehicles/{id}/range ### Description Retrieves the estimated range of the vehicle. ### Method GET ### Endpoint `/vehicles/{id}/range` ### Parameters #### Path Parameters - **id** (string) - Required - The unique identifier of the vehicle. ### Response #### Success Response (200) - **range** (VehicleListRange) - The range details of the vehicle. - **chargetrip_range** (ChargetripRange) - The Chargetrip estimated range. #### Response Example ```json { "range": { "chargetrip_range": { "estimated_range_km": 450, "estimated_range_miles": 280 } } } ``` ``` -------------------------------- ### Station Introduction Source: https://developers.chargetrip.com/api-reference/api/beta-features Introduction to station-related API endpoints. ```APIDOC ## Station Introduction ### Description This section provides an overview of the Chargetrip API endpoints related to charging stations. ``` -------------------------------- ### Route Legacy Introduction Source: https://developers.chargetrip.com/api-reference/api/beta-features Introduction to legacy route planning API endpoints. ```APIDOC ## Route Legacy Introduction ### Description This section provides an overview of the legacy Chargetrip API endpoints for route planning. ``` -------------------------------- ### GraphQL Error Response Example Source: https://developers.chargetrip.com/basics/api-basics/status-and-error-codes This example demonstrates a typical GraphQL error response from the Chargetrip API. It includes a general error message, location details, the path to the error, and an extensions object containing specific error details like a response code, status, and a more descriptive message. ```json { "errors": [ { "message": "The vehicle was not found in the database", "locations": [ { "line": 2, "column": 3 } ], "path": [ "addReview" ], "extensions": { "exception": { "response": "VEHICLE_NOT_FOUND", "status": 500, "message": "No vehicle was found with the provided ID", "code": "VEHICLE_NOT_FOUND" } } } ], "data": null } ``` -------------------------------- ### Navigation API Source: https://developers.chargetrip.com/api-reference Manage EV navigation sessions, including starting, updating, and finishing sessions. ```APIDOC ## Mutate to Start a New Navigation Session ### Description Initiate a new navigation session for a given route. ### Method POST ### Endpoint /navigation/start ### Parameters #### Request Body - **routeId** (string) - Required - The ID of the route to navigate. ### Request Example ```json { "query": "mutation ($routeId: String!) { startNavigation(routeId: $routeId) { sessionId } }", "variables": { "routeId": "route-12345" } } ``` ### Response #### Success Response (200) - **data** (object) - The response data containing the session ID. - **startNavigation** (object) - The result of starting the navigation session. - **sessionId** (string) - The unique identifier for the navigation session. #### Response Example ```json { "data": { "startNavigation": { "sessionId": "nav-session-abcde" } } } ``` ## Mutate to Finish Navigation ### Description Conclude an ongoing navigation session. ### Method POST ### Endpoint /navigation/finish ### Parameters #### Request Body - **sessionId** (string) - Required - The ID of the navigation session to finish. ### Request Example ```json { "query": "mutation ($sessionId: String!) { finishNavigation(sessionId: $sessionId) { success } }", "variables": { "sessionId": "nav-session-abcde" } } ``` ### Response #### Success Response (200) - **data** (object) - The response data indicating the success of finishing the session. - **finishNavigation** (object) - The result of finishing the navigation session. - **success** (boolean) - True if the session was successfully finished, false otherwise. #### Response Example ```json { "data": { "finishNavigation": { "success": true } } } ``` ``` -------------------------------- ### Create Route with Operator Preferences and Real-time Updates Source: https://developers.chargetrip.com/examples/routes/preferred-operator Creates a route using the Chargetrip API, allowing for operator preferences (none, preferred, required) and exclusions. It then subscribes to real-time updates for the created route. The final route data is passed to a callback function upon completion or if the route is not found. Dependencies include the initialized URQL client, `createRouteQuery`, and `routeUpdateSubscription`. ```javascript /** * Creates a route based on operator preference * @param { Object } - Object that manages the operator preference * @param { string } type - The type of operator preference. Can be either none, preferred or required. * @param { string } [level1] - The first level of operator preference. The higher the more preferred an operator is. * @param { string } [level2] - The second level of operator preference. * @param { string } [level3] - The third level of operator preference. * @param { string } [excluded] - The excluded level of operator preference. These operators won't be used when calculating the route. */ export const createRoute = ({ type = 'none', level1 = [], level2 = [], level3 = [], exclude = [] }, callback) => { // Assuming createRouteQuery and routeUpdateSubscription are imported from './queries.js' const createRouteQuery = `mutation ($type: OperatorPreferenceTypeEnum, $level1: [String], $level2: [String], $level3: [String], $exclude: [String]) { newRoute(type: $type, level1: $level1, level2: $level2, level3: $level3, exclude: $exclude) }`; const routeUpdateSubscription = `subscription ($id: ID!) { routeUpdatedById(id: $id) { status route { id legs { distance duration startStation { id name } endStation { id name } chargingStations { duration distance station { id name } } } summary { totalDistance totalDuration totalChargingTime } } } }`; client .mutation(createRouteQuery, { type, level1, level2, level3, exclude }) .toPromise() .then(response => { const routeId = response.data.newRoute; if (!routeId) return Promise.reject('Could not retrieve Route ID. The response is not valid.'); const { unsubscribe } = pipe( client.executeSubscription(createRequest(routeUpdateSubscription, { id: routeId })), subscribe(result => { const { status, route } = result.data.routeUpdatedById; if (status === 'done' && route) { unsubscribe(); callback(route); } else if (status === 'not_found') { callback(); } }), ); }) .catch(error => console.log(error)); }; ``` -------------------------------- ### Route Creation and Subscription Source: https://developers.chargetrip.com/api-reference/routes/introduction This section details how to create a route using the `createRoute` mutation and subscribe to route updates using GraphQL subscriptions. It emphasizes using subscriptions over recursive querying for efficiency and cost-effectiveness. ```APIDOC ## Route API Endpoints ### Create Route #### Description Creates a new route calculation request for a given vehicle and route parameters. #### Method MUTATION #### Endpoint `/graphql` #### Parameters ##### Request Body - **createRoute** (CreateRouteInput) - Required - Input object containing all parameters needed to create a route. - **origin** (GeoJSONPoint) - Required - The starting point of the route. - **destination** (GeoJSONPoint) - Required - The destination point of the route. - **vehicle** (VehicleInput) - Required - Vehicle details for route calculation. - **type** (string) - Required - The type of the vehicle (e.g., 'ev'). - **batteryCapacity** (float) - Required - The battery capacity of the vehicle in kWh. - **consumptionModel** (ConsumptionModelInput) - Required - Model for calculating energy consumption. - **type** (string) - Required - Type of consumption model (e.g., 'unit'). - **unitTime** (float) - Required - Time unit for consumption (e.g., 100 km). - **unitDistance** (float) - Required - Distance unit for consumption (e.g., 1 kWh). - **kmhAt100kmh** (float) - Required - Speed at 100 km/h. - **kmhAt100kmhConsumption** (float) - Required - Energy consumption at 100 km/h. - **kmhAt50kmh** (float) - Required - Speed at 50 km/h. - **kmhAt50kmhConsumption** (float) - Required - Energy consumption at 50 km/h. - **options** (RouteOptionsInput) - Optional - Additional options for route calculation. - **maxChargingTime** (integer) - Optional - Maximum allowed charging time in minutes. - **minChargingTime** (integer) - Optional - Minimum required charging time in minutes. - **chargeAtStopsOnly** (boolean) - Optional - If true, charging only at designated stops. - **routePreference** (string) - Optional - Preference for route calculation (e.g., 'fastest', 'shortest', 'eco'). - **operatorIds** (array of string) - Optional - List of preferred operator IDs. - **excludeOperatorIds** (array of string) - Optional - List of excluded operator IDs. ### Request Example ```json mutation { createRoute(input: { origin: { latitude: 52.370216, longitude: 4.895168 }, destination: { latitude: 53.551085, longitude: 9.993682 }, vehicle: { type: "ev", batteryCapacity: 75, consumptionModel: { type: "unit", unitTime: 100, unitDistance: 1, kmhAt100kmh: 100, kmhAt100kmhConsumption: 15, kmhAt50kmh: 50, kmhAt50kmhConsumption: 7.5 } }, options: { routePreference: "fastest", operatorIds: ["operator-1", "operator-2"] } }) { id } } ``` ### Subscribe to Route Updates #### Description Subscribes to real-time updates for a specific route calculation. The status progresses from `pending` to `processing` and finally to `done` upon completion, or `not_found`/`error` if issues occur. #### Method SUBSCRIPTION #### Endpoint `/graphql` #### Parameters ##### Query Parameters - **routeId** (string) - Required - The ID of the route to subscribe to. #### Response ##### Success Response (200) - **route** (Route) - Details of the route calculation status and result. - **id** (string) - The unique identifier for the route. - **status** (RouteStatus) - The current status of the route calculation (`pending`, `processing`, `done`, `not_found`, `error`). - **path** (array of RouteLeg) - The calculated route path, including legs and charging stops (available when status is `done`). #### Response Example ```json { "data": { "route": { "id": "route-123", "status": "processing", "path": null } } } ``` ```json { "data": { "route": { "id": "route-123", "status": "done", "path": [ { "start": { "latitude": 52.370216, "longitude": 4.895168 }, "end": { "latitude": 53.551085, "longitude": 9.993682 }, "distance": 600, "duration": 3600, "charge": { "location": { "latitude": 53.075769, "longitude": 8.807713 }, "duration": 1800, "energyNeeded": 20 } } ] } } } ``` ``` -------------------------------- ### Vehicle Power Specifications Source: https://developers.chargetrip.com/api-reference/vehicle/query-vehicles Get information about the vehicle's usable and maximum electric power output. ```APIDOC ## GET /vehicles/{id}/power ### Description Retrieves the power specifications for the vehicle, including usable and maximum electric power. ### Method GET ### Endpoint `/vehicles/{id}/power` ### Parameters #### Path Parameters - **id** (string) - Required - The unique identifier of the vehicle. ### Response #### Success Response (200) - **power** (Float) - Usable electric power of the vehicle. - **max_electric_power** (Float) - Maximum electric power the vehicle can output. - **unit** (PowerUnit) - The unit for power (kilowatt or horsepower). #### Response Example ```json { "power": 150.0, "max_electric_power": 200.0, "unit": "kilowatt" } ``` ``` -------------------------------- ### Query Navigation Session Source: https://developers.chargetrip.com/api-reference/api/beta-features No description -------------------------------- ### Charging Time and Speed Source: https://developers.chargetrip.com/api-reference/vehicle/query-premium-vehicle-details Get information about the time it takes to charge a vehicle from 10% to 80% and its charging speed. ```APIDOC ## Charging Time and Speed This endpoint provides charging performance metrics. ### Description Retrieves the time for a 10-80% charge and the vehicle's charging speed with unit options. ### Method GET ### Endpoint /vehicle/charging ### Parameters #### Query Parameters - **unit** (ChargeSpeedUnit) - Optional - The unit for charging speed. Allowed values: `kilowatt_hour`, `kilometers_per_hour`, `miles_per_hour`. Default: `kilometers_per_hour`. ### Request Example ``` GET /vehicle/charging?unit=kilometers_per_hour ``` ### Response #### Success Response (200) - **time_10_to_80_percent** (Int) - Time in minutes to charge from 10% to 80% with a fast charger. - **charge_speed** (Float) - Charging speed in the specified unit. #### Response Example ```json { "time_10_to_80_percent": 25, "charge_speed": 300.0 } ``` ``` -------------------------------- ### Vehicle Introduction API Source: https://developers.chargetrip.com/api-reference/vehicle/query-vehicles Provides an introduction to the vehicle API, explaining how to query vehicle details and use the vehicle list. ```APIDOC ## Vehicle Introduction API ### Description This API allows you to query the complete vehicle database. By default, it uses EU naming conventions for vehicles and plug types. You can customize results by using the `country` parameter and `region` filter for localized names and plug types. ### Method GET ### Endpoint /vehicles ### Parameters #### Query Parameters - **country** (string) - Optional - Specifies the country code (e.g., 'PT') to localize vehicle names, availability, and specifications. - **region** (string) - Optional - Filters vehicles available in a specific region. - **unit** (string) - Optional - Specifies the unit type for applicable fields (e.g., 'kilowatt_hour' for charge speed). ### Request Example ```json { "query": "vehicleList", "variables": { "country": "PT", "filters": { "drivetrain": "BEV", "purpose": "cargo" }, "search": "ID3" } } ``` ### Response #### Success Response (200) - **vehicleList** (array) - A list of vehicles matching the query criteria. - **name** (string) - The name of the vehicle. - **plugType** (string) - The type of plug used by the vehicle. - **drivetrain** (string) - The drivetrain type of the vehicle (e.g., 'BEV'). - **purpose** (string) - The intended purpose of the vehicle (e.g., 'cargo'). #### Response Example ```json { "data": { "vehicleList": [ { "name": "Hyundai Kauai", "plugType": "CCS", "drivetrain": "BEV", "purpose": "passenger" } ] } } ``` ``` -------------------------------- ### Vehicle Battery Information Source: https://developers.chargetrip.com/api-reference/vehicle/query-vehicles Get details about the vehicle's battery, including full and usable capacity and battery type. ```APIDOC ## GET /vehicles/{id}/battery ### Description Retrieves the battery specifications for the vehicle, including full capacity, usable capacity, and battery type. ### Method GET ### Endpoint `/vehicles/{id}/battery` ### Parameters #### Path Parameters - **id** (string) - Required - The unique identifier of the vehicle. ### Response #### Success Response (200) - **battery** (VehicleListBattery) - The battery details of the vehicle. - **full_kwh** (Float) - The full battery capacity in kWh. - **usable_kwh** (Float) - The usable battery capacity in kWh. - **type** (VehicleBatteryType) - The type of battery (e.g., lithium_ion). #### Response Example ```json { "battery": { "full_kwh": 75.0, "usable_kwh": 70.0, "type": "lithium_ion" } } ``` ``` -------------------------------- ### GraphQL Query Example Source: https://developers.chargetrip.com/basics/other-basics/graphql-basics This is a basic GraphQL query to fetch a list of vehicles and their car models. It demonstrates how to specify the exact data fields required from the API. ```graphql query vehicleList { vehicleList { id carModel } } ``` -------------------------------- ### Vehicle Introduction Source: https://developers.chargetrip.com/api-reference/api/beta-features Introduction to vehicle-related API endpoints. ```APIDOC ## Vehicle Introduction ### Description This section provides an overview of the Chargetrip API endpoints related to vehicle information. ``` -------------------------------- ### GraphQL Subscriptions (graphql-transport-ws) Source: https://developers.chargetrip.com/api-reference/api/quick-setup-guide Use the recommended `graphql-transport-ws` protocol for real-time subscriptions via websockets. ```APIDOC ## GraphQL Subscriptions (graphql-transport-ws) ### Description Connect to this URL using the recommended `graphql-transport-ws` protocol for real-time data subscriptions. ### Endpoint `wss://api.chargetrip.io/subscription` ``` -------------------------------- ### MCP Server Local Deployment Source: https://developers.chargetrip.com/api-reference/api/quick-setup-guide Deploy the MCP server locally using Node.js by cloning the repository and running npm commands. ```APIDOC ## MCP Server Local Deployment ### Description Deploy the MCP server locally by cloning the repository, installing dependencies, and building the project. ### Steps 1. Clone the repository: ```bash git clone ``` 2. Navigate to the project directory: ```bash cd ``` 3. Install dependencies: ```bash npm install ``` 4. Build the project: ```bash npm run build ``` This will create an `index.cjs` file in the `dist` directory, which can be used to start the MCP server. ```