API通信中间件

MCP是一款连接OpenAI与JWT或开放API的混合客户端/服务端中间件,支持动态工具集成与AI驱动的请求处理。

  • by tiagolofi
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 tiagolofi/mcp

使用说明

主控程序

此应用程序提供了OpenAI与任何使用JWT或开放的API之间的通信。客户端和服务器模型上下文协议(MCP)的混合服务。

先决条件

  • Java 21
  • 梅文

需要的设置

  • 环境变量
quarkus.rest.client.openai_url=https://api.openai.com
openai.model=gpt-4.1
openai.api.key=sk-proj-...
openai.prompt.id=pmpt_6904952...
openai.prompt.version=3

# apenas para segurança mínima
mcp.username=tiagolofi
mcp.password=********
mcp.roles=admin,user

# chaves RSA
private.key=MIIEvAIB...
public.key=MIIBIjANB...
  • 包含工具列表的文件 : 工具

Meta Prompt

Meta Prompt 是一个在https://platform.openai.com/chat您将负责处理服务发送的订单。

例如:

Você é um agente de IA que vai receber um prompt e um conjunto de dados (.json). Você deve utilizar o conjunto de dados para responder a solicitação do prompt. Caso não seja passado um conjunto de dados. Você deve responder apenas a solicitação do prompt. 

Prompt: {{prompt}} 

Dados: {{data}}

Tools

这是一组可以执行的工具。此对象是从一个文件序列化的 .json以便在可能的情况下添加新功能。

Tool

这是基于两个主要步骤的服务中将展示的功能:

  1. 向外部API执行HTTP请求,然后;
  2. 向请求 OpenAi 的客户端发送提示符,其中包含必要的数据。

Resquest

对象 Request 加载目标URL的标题,参数和路径的必要信息,并传递到终端 POST /mcp.

{
  "headers": [
    {
      "name": "Authentication",
      "value": "Bearer eyJjd..."
    }
  ],
  "params": [
    {
      // ?campo=valor
      "name": "campo", 
      "value": "valor"
    }
  ],
  "paths": [
    // base_url/teste
    "teste"
  ],
  "prompt": "string", // a solicitação para a OpenAI
  "type": "PROMPT", // se for WEB_SEARCH, os demais parâmetros não devem ser passados.
  "data": {} // Objeto genérico, pode ser qualquer coisa. Deve ser usado como coringa para executar `POST` na URL desejada
}

例子 - Tool 和 Curl

示例 1 - IBGE 名称 API

{
    "id": 1,
    "description": "calcula quantidade de registros de um nome em um período de tempo",
    "uri": "https://servicodados.ibge.gov.br/api/v2/censos/nomes",
    "method": "GET"
}
curl -X 'POST' \
  'http://localhost:8080/mcp?toolId=1' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer eyJjd...' \
  -H 'Content-Type: application/json' \
  -d '{
  "paths": [
    "moises"
  ],
  "prompt": "Quantas pessoas com o nome informado foram registradas entre 1980 e 2000?",
  "type": "PROMPT"
}'

例2:哈利·波特之家

{
    "id": 2,
    "description": "faz um resumo de uma casa em Harry Potter",
    "uri": "https://wizard-world-api.herokuapp.com/Houses",
    "method": "GET"
}
curl -X 'POST' \
  'http://localhost:7777/mcp?toolId=2' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer eyJjd...' \
  -H 'Content-Type: application/json' \
  -d '{
  "paths": [
    "805fd37a-65ae-4fe5-b336-d767b8b7c73a"
  ],
  "prompt": "Use os dados para descrever a casa Corvinal",
  "type": "PROMPT"
}'

例4:直接询问某个问题

{
    "id": 3,
    "description": "Análise psicológica do personagem Bayek de Siuá, de Assassins Creed Origins",
    "uri": null,
    "method": null
},
curl -X 'POST' \
  'http://localhost:7777/mcp?toolId=3' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer eyJjdH...' \
  -H 'Content-Type: application/json' \
  -d '{
  "prompt": "O que levou o Bayek a sair em sua jornada?",
  "type": "PROMPT"
}'

例三:网络搜索

{
    "id": 4,
    "description": "Últimas notícias sobre o futebol nordestino",
    "uri": null,
    "method": null
}
curl -X 'POST' \
  'http://localhost:7777/mcp?toolId=4' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer eyJjdH...' \
  -H 'Content-Type: application/json' \
  -d '{
  "prompt": "Me dê as últimas notícias sobre o Moto Clube do Maranhão",
  "type": "WEB_SEARCH"
}'

对 Tool 中使用的服务进行身份验证

利用端点 /external/login 对感兴趣的服务进行身份验证,例如:

curl -X 'POST' \
  'http://localhost:8080/external/login' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer eyJjdH...' \
  -H 'Content-Type: application/json' \
  -d '{
  "uri": "http://localhost:8080/login",
  "headers": null,
  "data": {"username": "tiagolofi", "password": "*******"}
}'

该请求的响应是对该服务的 URI 的响应。之后,您必须立即使用代币或将其存储在安全的位置,以便可以重复使用。