Implementujemy własny serwer MCP z VS Code Copilot

Nasz cel – czyli co nasz serwer MCP będzie robił?

Nasz serwer MCP ma dostarczać informacje o wskazanym kraju.
Informacje takie jak liczba ludności, waluta, powierzchnia i wiele innych.

Dzięki naszemu serwerowi Copilot Agent będzie miał dostęp do szczegółów o danym kraju i będzie mógł bazować na realnych danych.

Jaki REST API wykorzystamy?

Będziemy bazować na darmowym API: https://restcountries.com/

Udostępnia ono endpointy do pobrania informacji o danym kraju:

https://restcountries.com/v3.1/name/poland

Lub o wszystkich krajach (tu musimy podać interesujące nas pola):

https://restcountries.com/v3.1/all?fields=name,capital,region,population,area,flags,languages,currencies

Wymagane narzędzia i biblioteki

Node.js: środowisko uruchomieniowe dla JavaScript, TypeScript

VS Code: środowisko do rozwijania oprogramowania

Konto na GitHub: serwis do dzielenia się kodem, ale też pozwala na dostęp do darmowego Copiloa do VS Code.

Copilot: klient AI do VS Code

Startujemy z projektem

Szybkie przygotowanie projektu (w pustym katalogu z domyślnymi opcjami):

npm init -y

Polecenie npm init -y przygotuje Ci nowy plik package.json z domyślnymi opcjami, które później możesz wyedytować.

Aby zainstalować wymagane zależności:

npm i @modelcontextprotocol/sdk
npm i zod
npm i typescript
npm i @types/node

Albo wszystkie za jednym razem:

npm i @modelcontextprotocol/sdk zod typescript @types/node

Cały wynikowy kod

Struktura plików i katalogów:

mcp-server-example/
├── main.ts
├── package.json
└── .vscode/
    └── mcp.json

Zawartość pliku package.json:

{
  "name": "mcp-server-countries",
  "version": "1.0.0",
  "description": "",
  "type": "module",
  "scripts": {
    "test": "npx -y @modelcontextprotocol/inspector npx -y tsx main.ts"
  },
  "keywords": [],
  "author": "jaktestowac.pl",
  "license": "ISC",
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.14.0",
    "zod": "^3.25.67",
    "tsx": "^4.19.2",
    "typescript": "^5.4.5"
  }
}

Zawartość pliku main.ts:

import {
  McpServer
} from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";


const server = new McpServer({
  name: "mcp-server-countries",
  version: "1.0.0",
});


server.registerTool(
  "get-a-country",
  {
    title: "Get a specific country details",
    description:
      "Tool to get a specific country details from the REST API based on country name",
    inputSchema: {
      countryName: z.string().describe("The name of the country to get"),
    },
  },
  async ({ countryName }) => {
    const response = await fetch(
      `https://restcountries.com/v3.1/name/${countryName}`
    );
    const text = await response.text();
    return {
      content: [
        {
          type: "text",
          text,
        },
      ],
    };
  }
);


const transport = new StdioServerTransport();
server.connect(transport);

Zawartość pliku mcp.json:

{
  "servers": {
    "mcp-server-countries": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "tsx", "main.ts"]
    }
  },
  "inputs": []
}

Prompt do testów serwera MCP

Przykładowe prompty do testów:

Use tool to get information about country Poland and its population
Use tool to get information about country Poland and county Sweden and tell me what country has bigger area

Czym są tools (narzędzia)?

Tools to funkcje lub akcje udostępniane przez serwer, które model AI może wywoływać w trakcie konwersacji.

Zgodnie ze specyfikacją, narzędzia to funkcje wykonywane przez model AI (na żądanie model wygeneruje wywołanie takiego narzędzia). W praktyce narzędzia pozwalają modelowi wykonać obliczenia, operacje na danych lub działania w świecie zewnętrznym (np. pobranie informacji z API), których sam model nie może bezpośrednio wykonać.

Można je porównać do wywołań typu POST w tradycyjnym API – narzędzia mogą modyfikować stan lub wykonywać efekty uboczne (np. zapis pliku, wysłanie zapytania sieciowego).

Zewnętrzne linki i zasoby

6 komentarzy

  1. Hej hej,
    Czad – mimo iż todh namęczyłem się z dziadem – miałem problem z ustaleniem połaczenia, gdy używałem repo gita, bo chciał autentykacji, której nie byłem w stanie nigdzie mu podać – ale jak stworzyłem projekt bez połączenia z gitem to na lokalu wszystko poszło zgodnie z planem – jednak zaczynałem od stanu 30% a mam już 84% chat message’y więc mocno zżera – zasoby a szkoda – może darmowe konto nie nadaje się za bardzo do pobawienia się serwerem mcp ale potencjał mają – myślę że takie narzędzia, dostosowane do bawienia się różnymi REST API, ale z tego co widziałem na którymś z webinarów ludzi od Playwrighta – dotyczącym serverów MCP i zabawie w scrfapowanie stron i tworzenie testów – to potęga 🙂 – czy w projekcie czy ogólnodostępnymi – mógłby znaleźć mcp potężne zastosowanie – nie wiem jeszcze jak dalej to pójdzie – ale rozwija się mocno więc można jeszcze z niego sporo wyciągnąć – tak w ogóle działałem na połączeniu z GPT-4.1 i bardzo podobały mi się raporty w VSCodzie – bo inspektor to pobiera tylko obiekt i wyświetla a jeśli chodzi o chata VSCode – to super zwięzły fajny obiekt opisany zwraca np :

    Here is the information about Germany using the registered MCP tool:

    Official name: Federal Republic of Germany (Bundesrepublik Deutschland)
    Capital: Berlin
    Population: 83,240,525
    Region: Europe (Western Europe)
    Official language: German
    Currency: Euro (EUR)
    Area: 357,114 km²
    Let me know if you need more details!

    Super temat – dzięki za jego opis i poruszenie super sprawa.

    Pozdrawiam i spokojności życzę 😉
    Jakub

    Avatar Jakub Kruszyński
    1. Dzięki! 😁 Śmiało eksploruj dalej temat bo to tylko wierzchołek 😉
      I fakt – na darmowym koncie Copilota bardzo szybko mozna aktualnie dobić do limitu – wtedy przydaje się wiedza z programowania 😀

      Krzysiek Kijas Krzysiek Kijas
      1. Oj nie na to odpowiedziałem na co chciałem i tak masz rację to dopiero początki ale super jak zwykle przedstawione i nie omieszkam dalej eksplorować a i wiedza z programowania się podnośi – bo czasem jestem zmuszony doczytać z linków zewnętrznych rozwiązania i zastosowanie – aby sobie we łbie ułożyć 🙂

        Pozdrawiam i spokojności życzę – do wkrótce jeśli chodzi o ten temat 🙂

        Avatar Jakub Kruszyński
  2. Chętnie bym zastosował na apce z którą pracuje na co dzień, ale na ten moment jestem spragniony kolejnych lekcji 😉 natomiast bardzo mi się podobało wskazanie zastosowanych rozwiązań z dokumentacji, gdzie to znaleźć i jak zastosować to było naprawdę super. 😉

    Avatar Andrzej S
    1. Ciesze się, że Ci się podobał ten materiał 😁
      Cały koncept MCP bardzo dynamicznie się rozwija, więc najważniejsze jest aby wiedzieć, gdzie i jak szukać najnowszych informacji😉
      Z doświadczenia wiem, że aktualnie dość niewiele projektów/firm decyduje się na stworzenie MCP do rozwijanych aplikacji… ale może się to zmienić.

      Tymczasem w kolejnych lekcjach zobaczysz co jeszcze może nam zaoferować MCP i myślę że bardzo spodoba Ci się sekcja Projekt integracji serwera MCP z aplikacją 😁

      Krzysiek Kijas Krzysiek Kijas
      1. Super – jak tylko znów wyzeruje mi się copilot to będę zabierał się dalej za materiały – już nie mogę się doczekać – ale połowa września już niedługo 🙂

        Pozdrawiam i spokojności życzę 🙂

        Avatar Jakub Kruszyński

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *