Recursos em servidores MCP

Introdução ao Model Context Protocol (MCP)

James Chapman

AI Curriculum Manager, DataCamp

O que são recursos MCP?

 

Capítulo 2

  • Recursos + Prompts

Texto alternativo

Introdução ao Model Context Protocol (MCP)

O que são recursos MCP?

 

Capítulo 2

  • Recursos e prompts
  • Integração com APIs e bancos de dados

Recursos: dados ou objetos só de leitura obtidos pelo cliente MCP

  • Não são necessariamente chamados por um LLM
  • Direcionados pelo app → ex.: preferências do usuário
  • Direcionados pelo usuário → ex.: upload de arquivo

Texto alternativo

Introdução ao Model Context Protocol (MCP)

Recursos MCP em apps de IA

 

Recursos do MCP em apps de IA

Introdução ao Model Context Protocol (MCP)

Definindo recursos do servidor 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: identificador uniforme de recurso

    • Pode apontar para arquivos locais, APIs, servidores remotos etc.
    • Pode inserir parâmetros dinamicamente, como ID de usuário
  • locations.txt (no servidor) → lista de locais de fuso horário

Introdução ao Model Context Protocol (MCP)

Definindo recursos do servidor MCP

@mcp.resource("file://locations.txt")
def get_locations() -> str:
    """
    Obter a lista de cidades para conversão de fuso horário.

    Returns:
        Contents of the locations.txt file with city names
    """
    try:
        with open('locations.txt', 'r') as f:
            content = f.read()
        return content
    except FileNotFoundError:
        return "locations.txt file not found"
Introdução ao Model Context Protocol (MCP)

Salvando o servidor: 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")
Introdução ao Model Context Protocol (MCP)

Cliente: listando recursos

async def list_resources():
    """Listar todos os recursos disponíveis do servidor 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("Recursos disponíveis:") for resource in response.resources: print(f" - {resource.uri}") print(f" Nome: {resource.name}") print(f" Descrição: {resource.description}") return response.resources
Introdução ao Model Context Protocol (MCP)

Cliente: listando recursos

print(asyncio.run(list_resources()))
Recursos disponíveis:
 - file://locations.txt/
   Nome: get_locations
   Descrição: 
    Obter a lista de cidades para conversão de fuso horário.

    Returns:
        Contents of the locations.txt file with city names

[Resource(name='get_locations', title=None, uri=AnyUrl('file://locations.txt/'),
          description='\n    Obter a lista de cidades para conversão de fuso horário.\n\n...',
          mimeType='text/plain', size=None, icons=None, annotations=None, meta=None)]
Introdução ao Model Context Protocol (MCP)

Cliente: lendo recursos

async def read_resource(resource_uri: str):
    """Ler um recurso específico pelo 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"Lendo recurso: {resource_uri}") resource_content = await session.read_resource(resource_uri)
for content in resource_content.contents: print(f"\nConteúdo ({content.mimeType}):") print(content.text) return resource_content
Introdução ao Model Context Protocol (MCP)

Cliente: lendo recursos

print(asyncio.run(read_resource('file://locations.txt/')))
Lendo recurso: file://locations.txt

Conteúdo (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...')])
Introdução ao Model Context Protocol (MCP)

Vamos praticar!

Introdução ao Model Context Protocol (MCP)

Preparing Video For Download...