Ressources dans les serveurs MCP

Introduction au Model Context Protocol (MCP)

James Chapman

AI Curriculum Manager, DataCamp

Qu'est-ce qu'une ressource MCP ?

 

Chapitre 2

  • Ressources + invites

primitive1.png

Introduction au Model Context Protocol (MCP)

Qu'est-ce qu'une ressource MCP ?

 

Chapitre 2

  • Ressources et invites
  • Intégration avec des API et des bases de données

Ressources : données en lecture seule ou objets de données récupérés par le client MCP

  • Pas forcément appelées par un LLM
  • Pilotées par l'application → ex. préférences utilisateur
  • Pilotées par l'utilisateur → ex. téléversement de fichier

primitive2.png

Introduction au Model Context Protocol (MCP)

Ressources MCP dans les applis IA

 

mcp_resources.png

Introduction au Model Context Protocol (MCP)

Définir des ressources de serveur MCP

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Timezone Converter")


@mcp.resource("file://locations.txt")
def get_locations(): try: with open('locations.txt', 'r') as f: content = f.read() return content except FileNotFoundError: return "locations.txt file not found"

 

  • URI : identifiant uniforme de ressource

    • Peut pointer vers des fichiers locaux, des API, des serveurs distants, etc.
    • Peut insérer dynamiquement des paramètres comme l'ID utilisateur
  • locations.txt (côté serveur) → liste des lieux de fuseaux horaires

Introduction au Model Context Protocol (MCP)

Définir des ressources de serveur MCP

@mcp.resource("file://locations.txt")
def get_locations() -> str:
    """
    Obtenir la liste des villes pour la conversion de fuseau horaire.

    Returns:
        Contenu du fichier locations.txt avec les noms de villes
    """
    try:
        with open('locations.txt', 'r') as f:
            content = f.read()
        return content
    except FileNotFoundError:
        return "locations.txt file not found"
Introduction au Model Context Protocol (MCP)

Enregistrer le serveur : timezone_server.py

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Timezone Converter")

# Tools from before...

@mcp.resource("file://locations.txt")
def get_locations() -> str:
    # ...

if __name__ == "__main__":
    mcp.run(transport="stdio")
Introduction au Model Context Protocol (MCP)

Client : lister les ressources

async def list_resources():
    """Lister toutes les ressources disponibles du serveur MCP."""
    params = StdioServerParameters(command=sys.executable, args=["timezone_server.py"])

    async with stdio_client(params) as (reader, writer):
        async with ClientSession(reader, writer) as session:
            await session.initialize()

response = await session.list_resources()
print("Ressources disponibles :") for resource in response.resources: print(f" - {resource.uri}") print(f" Nom : {resource.name}") print(f" Description : {resource.description}") return response.resources
Introduction au Model Context Protocol (MCP)

Client : lister les ressources

print(asyncio.run(list_resources()))
Ressources disponibles :
 - file://locations.txt/
   Nom : get_locations
   Description : 
    Obtenir la liste des villes pour la conversion de fuseau horaire.

    Returns:
        Contenu du fichier locations.txt avec les noms de villes

[Resource(name='get_locations', title=None, uri=AnyUrl('file://locations.txt/'),
          description='\n    Obtenir la liste des villes pour la conversion de fuseau horaire.\n\n...',
          mimeType='text/plain', size=None, icons=None, annotations=None, meta=None)]
Introduction au Model Context Protocol (MCP)

Client : lire des ressources

async def read_resource(resource_uri: str):
    """Lire une ressource spécifique par URI."""
    params = StdioServerParameters(command=sys.executable, args=["timezone_server.py"])

    async with stdio_client(params) as (reader, writer):
        async with ClientSession(reader, writer) as session:
            await session.initialize()

print(f"Lecture de la ressource : {resource_uri}") resource_content = await session.read_resource(resource_uri)
for content in resource_content.contents: print(f"\nContenu ({content.mimeType}) :") print(content.text) return resource_content
Introduction au Model Context Protocol (MCP)

Client : lire des ressources

print(asyncio.run(read_resource('file://locations.txt/')))
Lecture de la ressource : file://locations.txt

Contenu (text/plain) :
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
...

ReadResourceResult(meta=None, contents=[TextResourceContents(uri=AnyUrl('file://locations.txt/'),
                   mimeType='text/plain', meta=None, text='Africa/Abidjan\nAfrica/Accra...')])
Introduction au Model Context Protocol (MCP)

Passons à la pratique !

Introduction au Model Context Protocol (MCP)

Preparing Video For Download...