biatoolkit 1.0.2__tar.gz → 1.0.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: biatoolkit
3
- Version: 1.0.2
3
+ Version: 1.0.4
4
4
  Summary: Biblioteca para desenvolvedores que utilizam o BiaAgentBuilder
5
5
  Author: Bia Platform Team
6
6
  Author-email: data.platform@sankhya.com.br
@@ -25,18 +25,18 @@ Biblioteca Python para facilitar o desenvolvimento de servidores MCP integrados
25
25
 
26
26
  Nesta seção você encontrará uma breve descrição de cada classe da biblioteca **Bia Toolkit**.
27
27
 
28
- ### **BasicClient**
28
+ ### **BiaClient**
29
29
 
30
- A classe `BasicClient` tem o objetivo de criar um cliente HTTP para comunicação com servidores MCP (Model Context Protocol).
30
+ A classe `BiaClient` tem o objetivo de criar um cliente HTTP para comunicação com servidores MCP (Model Context Protocol).
31
31
 
32
32
  **Principais métodos**:
33
33
 
34
34
  - **list_tools**: Lista todas as ferramentas disponíveis no servidor MCP.
35
35
  - **call_tool**: Executa uma ferramenta específica no servidor MCP.
36
36
 
37
- ### **Util**
37
+ ### **BiaUtil**
38
38
 
39
- A classe `Util` fornece métodos auxiliares para gerenciar headers de requisições e parâmetros de configuração em servidores MCP.
39
+ A classe `BiaUtil` fornece métodos auxiliares para gerenciar headers de requisições e parâmetros de configuração em servidores MCP.
40
40
 
41
41
  **Principais métodos**:
42
42
 
@@ -128,10 +128,10 @@ Crie um novo arquivo chamado `local.py` com o seguinte conteúdo:
128
128
 
129
129
  ```python
130
130
  import asyncio
131
- from biatoolkit.basic_client import BasicClient
131
+ from biatoolkit.basic_client import BiaClient
132
132
 
133
133
  MCP_SERVER_URL = "http://0.0.0.0:8000/mcp"
134
- client = BasicClient(MCP_SERVER_URL)
134
+ client = BiaClient(MCP_SERVER_URL)
135
135
 
136
136
  async def list_tools() -> None:
137
137
  tools = await client.list_tools()
@@ -153,7 +153,7 @@ asyncio.run(main())
153
153
 
154
154
  #### **Entendendo o código**
155
155
 
156
- - **BasicClient**: É uma classe da biblioteca **Bia Toolkit** que encapsula um cliente HTTP para comunicação com servidores MCP.
156
+ - **BiaClient**: É uma classe da biblioteca **Bia Toolkit** que encapsula um cliente HTTP para comunicação com servidores MCP.
157
157
  - **list_tools**: Executa a instrução `client.list_tools()` para recuperar todas as ferramentas disponíveis no servidor MCP.
158
158
  - **call_tool**: Executa a instrução `client.call_tool(tool_name, params)` para executar uma ferramenta específica do servidor MCP.
159
159
 
@@ -204,7 +204,7 @@ Se seu servidor MCP estiver sendo executado **localmente**, você conseguirá in
204
204
 
205
205
  ```python
206
206
  import asyncio
207
- from biatoolkit.basic_client import BasicClient
207
+ from biatoolkit.basic_client import BiaClient
208
208
 
209
209
  MCP_SERVER_URL = "http://0.0.0.0:8000/mcp"
210
210
 
@@ -226,7 +226,7 @@ headers = {
226
226
  "Content-Type": "application/json"
227
227
  }
228
228
 
229
- client = BasicClient(MCP_SERVER_URL, headers=headers)
229
+ client = BiaClient(MCP_SERVER_URL, headers=headers)
230
230
 
231
231
  async def list_tools() -> None:
232
232
  tools = await client.list_tools()
@@ -246,19 +246,13 @@ async def main():
246
246
  asyncio.run(main())
247
247
  ```
248
248
 
249
- #### **Entendendo o código**
250
-
251
- - **headers**: Veja que a variável `headers` é definida com a lista de parâmetros válidos e depois utilizada em `client = BasicClient(MCP_SERVER_URL, headers=headers)`.
252
-
253
- ⚠️ IMPORTANTE: Ao utilizar os serviços de interação com a Bia (**/agent/stream**, **/agent/message** ou **/agent/invoke**), os parâmetros já são automaticamente preenchidos e enviados pelos serviços.
254
-
255
- ### **Recuperando os parâmetros no MCP Server enviados via header**
249
+ ...existing code...
256
250
 
257
- Para recuperar os parâmetros no MCP Server que foram enviados por meio do `header` da requisição, basta utilizar a classe `Util` conforme a seguir:
251
+ Para recuperar os parâmetros no MCP Server que foram enviados por meio do `header` da requisição, basta utilizar a classe `BiaUtil` conforme a seguir:
258
252
 
259
253
  ```python
260
254
  from mcp.server.fastmcp import FastMCP
261
- from biatoolkit.util import Util
255
+ from biatoolkit.util import BiaUtil
262
256
 
263
257
  mcp = FastMCP(host="0.0.0.0", stateless_http=True)
264
258
 
@@ -266,7 +260,7 @@ mcp = FastMCP(host="0.0.0.0", stateless_http=True)
266
260
  def processar() -> str:
267
261
  """Executa o processamento de algo"""
268
262
 
269
- util = Util(mcp)
263
+ util = BiaUtil(mcp)
270
264
  header = util.get_header()
271
265
 
272
266
  # Exemplo de uso dos parâmetros do header. Utilize conforme a necessidade
@@ -296,11 +290,11 @@ Você pode utilizar parâmetros sensíveis de duas formas:
296
290
  - Usando o cofre de segredos do Bia Agent Builder para execução em ambiente produtivo.
297
291
  - Você pode adicionar parâmetros sensíveis no cofre de segredos do Bia Agent Builder. Para adicionar, alterar e excluir os parâmetros do cofre, utilize as funcionalidades da Plataforma Bia Agent Builder UI.
298
292
 
299
- Para recuperar um valor sensível no seu MCP Server, utilize o método `get_parameter(parameter_name: str)` da classe `Util`.
293
+ Para recuperar um valor sensível no seu MCP Server, utilize o método `get_parameter(parameter_name: str)` da classe `BiaUtil`.
300
294
 
301
295
  ```python
302
296
  from mcp.server.fastmcp import FastMCP
303
- from biatoolkit.util import Util
297
+ from biatoolkit.util import BiaUtil
304
298
 
305
299
  mcp = FastMCP(host="0.0.0.0", stateless_http=True)
306
300
 
@@ -308,7 +302,7 @@ mcp = FastMCP(host="0.0.0.0", stateless_http=True)
308
302
  def processar() -> str:
309
303
  """Executa o processamento de algo"""
310
304
 
311
- util = Util(mcp)
305
+ util = BiaUtil(mcp)
312
306
  valor = util.get_parameter("meu_parametro")
313
307
 
314
308
  # Exemplo de uso do parâmetro recuperado. Utilize conforme a necessidade
@@ -38,18 +38,18 @@ Para incluir ou alterar classes/métodos na biblioteca do **Bia Toolkit**, siga
38
38
 
39
39
  Nesta seção você encontrará uma breve descrição de cada classe da biblioteca **Bia Toolkit**.
40
40
 
41
- ### **BasicClient**
41
+ ### **BiaClient**
42
42
 
43
- A classe `BasicClient` tem o objetivo de criar um cliente HTTP para comunicação com servidores MCP (Model Context Protocol).
43
+ A classe `BiaClient` tem o objetivo de criar um cliente HTTP para comunicação com servidores MCP (Model Context Protocol).
44
44
 
45
45
  **Principais métodos**:
46
46
 
47
47
  - **list_tools**: Lista todas as ferramentas disponíveis no servidor MCP.
48
48
  - **call_tool**: Executa uma ferramenta específica no servidor MCP.
49
49
 
50
- ### **Util**
50
+ ### **BiaUtil**
51
51
 
52
- A classe `Util` fornece métodos auxiliares para gerenciar headers de requisições e parâmetros de configuração em servidores MCP.
52
+ A classe `BiaUtil` fornece métodos auxiliares para gerenciar headers de requisições e parâmetros de configuração em servidores MCP.
53
53
 
54
54
  **Principais métodos**:
55
55
 
@@ -141,10 +141,10 @@ Crie um novo arquivo chamado `local.py` com o seguinte conteúdo:
141
141
 
142
142
  ```python
143
143
  import asyncio
144
- from biatoolkit.basic_client import BasicClient
144
+ from biatoolkit.basic_client import BiaClient
145
145
 
146
146
  MCP_SERVER_URL = "http://0.0.0.0:8000/mcp"
147
- client = BasicClient(MCP_SERVER_URL)
147
+ client = BiaClient(MCP_SERVER_URL)
148
148
 
149
149
  async def list_tools() -> None:
150
150
  tools = await client.list_tools()
@@ -166,7 +166,7 @@ asyncio.run(main())
166
166
 
167
167
  #### **Entendendo o código**
168
168
 
169
- - **BasicClient**: É uma classe da biblioteca **Bia Toolkit** que encapsula um cliente HTTP para comunicação com servidores MCP.
169
+ - **BiaClient**: É uma classe da biblioteca **Bia Toolkit** que encapsula um cliente HTTP para comunicação com servidores MCP.
170
170
  - **list_tools**: Executa a instrução `client.list_tools()` para recuperar todas as ferramentas disponíveis no servidor MCP.
171
171
  - **call_tool**: Executa a instrução `client.call_tool(tool_name, params)` para executar uma ferramenta específica do servidor MCP.
172
172
 
@@ -217,7 +217,7 @@ Se seu servidor MCP estiver sendo executado **localmente**, você conseguirá in
217
217
 
218
218
  ```python
219
219
  import asyncio
220
- from biatoolkit.basic_client import BasicClient
220
+ from biatoolkit.basic_client import BiaClient
221
221
 
222
222
  MCP_SERVER_URL = "http://0.0.0.0:8000/mcp"
223
223
 
@@ -239,7 +239,7 @@ headers = {
239
239
  "Content-Type": "application/json"
240
240
  }
241
241
 
242
- client = BasicClient(MCP_SERVER_URL, headers=headers)
242
+ client = BiaClient(MCP_SERVER_URL, headers=headers)
243
243
 
244
244
  async def list_tools() -> None:
245
245
  tools = await client.list_tools()
@@ -261,17 +261,17 @@ asyncio.run(main())
261
261
 
262
262
  #### **Entendendo o código**
263
263
 
264
- - **headers**: Veja que a variável `headers` é definida com a lista de parâmetros válidos e depois utilizada em `client = BasicClient(MCP_SERVER_URL, headers=headers)`.
264
+ - **headers**: Veja que a variável `headers` é definida com a lista de parâmetros válidos e depois utilizada em `client = BiaClient(MCP_SERVER_URL, headers=headers)`.
265
265
 
266
266
  ⚠️ IMPORTANTE: Ao utilizar os serviços de interação com a Bia (**/agent/stream**, **/agent/message** ou **/agent/invoke**), os parâmetros já são automaticamente preenchidos e enviados pelos serviços.
267
267
 
268
268
  ### **Recuperando os parâmetros no MCP Server enviados via header**
269
269
 
270
- Para recuperar os parâmetros no MCP Server que foram enviados por meio do `header` da requisição, basta utilizar a classe `Util` conforme a seguir:
270
+ Para recuperar os parâmetros no MCP Server que foram enviados por meio do `header` da requisição, basta utilizar a classe `BiaUtil` conforme a seguir:
271
271
 
272
272
  ```python
273
273
  from mcp.server.fastmcp import FastMCP
274
- from biatoolkit.util import Util
274
+ from biatoolkit.util import BiaUtil
275
275
 
276
276
  mcp = FastMCP(host="0.0.0.0", stateless_http=True)
277
277
 
@@ -279,7 +279,7 @@ mcp = FastMCP(host="0.0.0.0", stateless_http=True)
279
279
  def processar() -> str:
280
280
  """Executa o processamento de algo"""
281
281
 
282
- util = Util(mcp)
282
+ util = BiaUtil(mcp)
283
283
  header = util.get_header()
284
284
 
285
285
  # Exemplo de uso dos parâmetros do header. Utilize conforme a necessidade
@@ -309,11 +309,11 @@ Você pode utilizar parâmetros sensíveis de duas formas:
309
309
  - Usando o cofre de segredos do Bia Agent Builder para execução em ambiente produtivo.
310
310
  - Você pode adicionar parâmetros sensíveis no cofre de segredos do Bia Agent Builder. Para adicionar, alterar e excluir os parâmetros do cofre, utilize as funcionalidades da Plataforma Bia Agent Builder UI.
311
311
 
312
- Para recuperar um valor sensível no seu MCP Server, utilize o método `get_parameter(parameter_name: str)` da classe `Util`.
312
+ Para recuperar um valor sensível no seu MCP Server, utilize o método `get_parameter(parameter_name: str)` da classe `BiaUtil`.
313
313
 
314
314
  ```python
315
315
  from mcp.server.fastmcp import FastMCP
316
- from biatoolkit.util import Util
316
+ from biatoolkit.util import BiaUtil
317
317
 
318
318
  mcp = FastMCP(host="0.0.0.0", stateless_http=True)
319
319
 
@@ -321,7 +321,7 @@ mcp = FastMCP(host="0.0.0.0", stateless_http=True)
321
321
  def processar() -> str:
322
322
  """Executa o processamento de algo"""
323
323
 
324
- util = Util(mcp)
324
+ util = BiaUtil(mcp)
325
325
  valor = util.get_parameter("meu_parametro")
326
326
 
327
327
  # Exemplo de uso do parâmetro recuperado. Utilize conforme a necessidade
@@ -0,0 +1,63 @@
1
+ from mcp import ClientSession
2
+ from mcp.client.streamable_http import streamablehttp_client
3
+
4
+ class BiaClient:
5
+ """
6
+ Cliente básico para interação com o MCP (Middleware de Comunicação de Processos).
7
+ Permite listar ferramentas disponíveis e executar ferramentas específicas via HTTP.
8
+ """
9
+
10
+ def __init__(self, url: str = "http://0.0.0.0:8000/mcp", headers: dict = None):
11
+ """
12
+ Inicializa o BasicClient.
13
+
14
+ Args:
15
+ url (str): URL base do MCP. Se não terminar com '/mcp', será adicionado automaticamente.
16
+ headers (dict): Cabeçalhos HTTP opcionais para requisições.
17
+ """
18
+ sufix = "/mcp"
19
+ # Garante que a URL termine com '/mcp'
20
+ self.url = url if url.endswith(sufix) else f"{url}{sufix}"
21
+ self.headers = headers
22
+
23
+ async def list_tools(self) -> dict:
24
+ """
25
+ Lista as ferramentas disponíveis no MCP.
26
+
27
+ Returns:
28
+ dict: Dicionário contendo as ferramentas disponíveis.
29
+ """
30
+ # Cria um cliente HTTP streamable para comunicação assíncrona
31
+ async with streamablehttp_client(self.url, self.headers, timeout=120, terminate_on_close=False) as (
32
+ read_stream,
33
+ write_stream,
34
+ _,
35
+ ):
36
+ # Cria uma sessão de cliente MCP usando os streams
37
+ async with ClientSession(read_stream, write_stream) as session:
38
+ await session.initialize() # Inicializa a sessão
39
+ tool_result = await session.list_tools() # Solicita a lista de ferramentas
40
+ return tool_result
41
+
42
+ async def call_tool(self, tool_name: str, params: dict = None) -> dict:
43
+ """
44
+ Executa uma ferramenta específica disponível no MCP.
45
+
46
+ Args:
47
+ tool_name (str): Nome da ferramenta a ser executada.
48
+ params (dict, opcional): Parâmetros para a execução da ferramenta.
49
+
50
+ Returns:
51
+ dict: Resultado da execução da ferramenta.
52
+ """
53
+ # Cria um cliente HTTP streamable para comunicação assíncrona
54
+ async with streamablehttp_client(self.url, self.headers, timeout=120, terminate_on_close=False) as (
55
+ read_stream,
56
+ write_stream,
57
+ _,
58
+ ):
59
+ # Cria uma sessão de cliente MCP usando os streams
60
+ async with ClientSession(read_stream, write_stream) as session:
61
+ await session.initialize() # Inicializa a sessão
62
+ result = await session.call_tool(tool_name, params) # Executa a ferramenta
63
+ return result
@@ -0,0 +1,79 @@
1
+ from mcp.server.fastmcp import FastMCP
2
+ from .schema.header import Header
3
+
4
+ import boto3
5
+ import os
6
+
7
+ class BiaUtil():
8
+
9
+ HEADER_PREFIX = "x-amzn-bedrock-agentcore-runtime-custom"
10
+
11
+ def __init__(self, mcp: FastMCP):
12
+ """
13
+ Inicializa o utilitário BiaUtil com uma instância do FastMCP.
14
+
15
+ Args:
16
+ mcp (FastMCP): Instância do servidor FastMCP para obter contexto da requisição.
17
+ """
18
+ self.mcp = mcp
19
+
20
+ def __get_from_ssm(self, parameter_name: str) -> str:
21
+ """
22
+ Busca o valor de um parâmetro no AWS SSM Parameter Store.
23
+
24
+ Args:
25
+ parameter_name (str): Nome do parâmetro a ser buscado.
26
+
27
+ Returns:
28
+ str: Valor do parâmetro, ou None se não encontrado.
29
+ """
30
+ ctx = self.mcp.get_context() # Obtém o contexto da requisição atual
31
+ headers = ctx.request_context.request.headers # Acessa os headers da requisição
32
+ prefix = headers.get(f"{self.HEADER_PREFIX}-prefix", None) # Prefixo customizado do header
33
+ client = boto3.client('ssm', region_name="sa-east-1") # Cria cliente SSM na região especificada
34
+ try:
35
+ response = client.get_parameter(
36
+ Name=f"{prefix}/{parameter_name}",
37
+ WithDecryption=True
38
+ )
39
+ except client.exceptions.ParameterNotFound:
40
+ return None # Retorna None se o parâmetro não for encontrado
41
+ return response.get('Parameter').get('Value') # Retorna o valor do parâmetro
42
+
43
+ def get_header(self) -> Header:
44
+ """
45
+ Retorna os parâmetros padrão contidos no header da requisição.
46
+
47
+ Returns:
48
+ Header: Objeto Header preenchido com os valores dos headers customizados.
49
+ """
50
+ ctx = self.mcp.get_context() # Obtém o contexto da requisição atual
51
+ headers = ctx.request_context.request.headers # Acessa os headers da requisição
52
+ # Preenche o objeto Header com os valores dos headers customizados
53
+ return Header(
54
+ current_host=headers.get(f"{self.HEADER_PREFIX}-current-host", None),
55
+ user_email=headers.get(f"{self.HEADER_PREFIX}-user-email", None),
56
+ jwt_token=headers.get(f"{self.HEADER_PREFIX}-jwt-token", None),
57
+ jsessionid=headers.get(f"{self.HEADER_PREFIX}-jsessionid", None),
58
+ organization_id=int(headers.get(f"{self.HEADER_PREFIX}-organization-id", 0)),
59
+ codparc=int(headers.get(f"{self.HEADER_PREFIX}-codparc", 0)),
60
+ iam_user_id=int(headers.get(f"{self.HEADER_PREFIX}-iam-user-id", 0)),
61
+ gateway_token=headers.get(f"{self.HEADER_PREFIX}-gateway-token", None)
62
+ )
63
+
64
+ def get_parameter(self, parameter_name: str) -> str:
65
+ """
66
+ Retorna o valor do parâmetro, buscando primeiro na variável de ambiente
67
+ e depois no AWS SSM Parameter Store caso não exista na variável de ambiente.
68
+
69
+ Args:
70
+ parameter_name (str): Nome do parâmetro a ser buscado.
71
+
72
+ Returns:
73
+ str: Valor do parâmetro, ou None se não encontrado.
74
+ """
75
+ # Busca o valor na variável de ambiente, se não existir busca no SSM
76
+ return os.getenv(
77
+ parameter_name,
78
+ self.__get_from_ssm(parameter_name)
79
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: biatoolkit
3
- Version: 1.0.2
3
+ Version: 1.0.4
4
4
  Summary: Biblioteca para desenvolvedores que utilizam o BiaAgentBuilder
5
5
  Author: Bia Platform Team
6
6
  Author-email: data.platform@sankhya.com.br
@@ -25,18 +25,18 @@ Biblioteca Python para facilitar o desenvolvimento de servidores MCP integrados
25
25
 
26
26
  Nesta seção você encontrará uma breve descrição de cada classe da biblioteca **Bia Toolkit**.
27
27
 
28
- ### **BasicClient**
28
+ ### **BiaClient**
29
29
 
30
- A classe `BasicClient` tem o objetivo de criar um cliente HTTP para comunicação com servidores MCP (Model Context Protocol).
30
+ A classe `BiaClient` tem o objetivo de criar um cliente HTTP para comunicação com servidores MCP (Model Context Protocol).
31
31
 
32
32
  **Principais métodos**:
33
33
 
34
34
  - **list_tools**: Lista todas as ferramentas disponíveis no servidor MCP.
35
35
  - **call_tool**: Executa uma ferramenta específica no servidor MCP.
36
36
 
37
- ### **Util**
37
+ ### **BiaUtil**
38
38
 
39
- A classe `Util` fornece métodos auxiliares para gerenciar headers de requisições e parâmetros de configuração em servidores MCP.
39
+ A classe `BiaUtil` fornece métodos auxiliares para gerenciar headers de requisições e parâmetros de configuração em servidores MCP.
40
40
 
41
41
  **Principais métodos**:
42
42
 
@@ -128,10 +128,10 @@ Crie um novo arquivo chamado `local.py` com o seguinte conteúdo:
128
128
 
129
129
  ```python
130
130
  import asyncio
131
- from biatoolkit.basic_client import BasicClient
131
+ from biatoolkit.basic_client import BiaClient
132
132
 
133
133
  MCP_SERVER_URL = "http://0.0.0.0:8000/mcp"
134
- client = BasicClient(MCP_SERVER_URL)
134
+ client = BiaClient(MCP_SERVER_URL)
135
135
 
136
136
  async def list_tools() -> None:
137
137
  tools = await client.list_tools()
@@ -153,7 +153,7 @@ asyncio.run(main())
153
153
 
154
154
  #### **Entendendo o código**
155
155
 
156
- - **BasicClient**: É uma classe da biblioteca **Bia Toolkit** que encapsula um cliente HTTP para comunicação com servidores MCP.
156
+ - **BiaClient**: É uma classe da biblioteca **Bia Toolkit** que encapsula um cliente HTTP para comunicação com servidores MCP.
157
157
  - **list_tools**: Executa a instrução `client.list_tools()` para recuperar todas as ferramentas disponíveis no servidor MCP.
158
158
  - **call_tool**: Executa a instrução `client.call_tool(tool_name, params)` para executar uma ferramenta específica do servidor MCP.
159
159
 
@@ -204,7 +204,7 @@ Se seu servidor MCP estiver sendo executado **localmente**, você conseguirá in
204
204
 
205
205
  ```python
206
206
  import asyncio
207
- from biatoolkit.basic_client import BasicClient
207
+ from biatoolkit.basic_client import BiaClient
208
208
 
209
209
  MCP_SERVER_URL = "http://0.0.0.0:8000/mcp"
210
210
 
@@ -226,7 +226,7 @@ headers = {
226
226
  "Content-Type": "application/json"
227
227
  }
228
228
 
229
- client = BasicClient(MCP_SERVER_URL, headers=headers)
229
+ client = BiaClient(MCP_SERVER_URL, headers=headers)
230
230
 
231
231
  async def list_tools() -> None:
232
232
  tools = await client.list_tools()
@@ -246,19 +246,13 @@ async def main():
246
246
  asyncio.run(main())
247
247
  ```
248
248
 
249
- #### **Entendendo o código**
250
-
251
- - **headers**: Veja que a variável `headers` é definida com a lista de parâmetros válidos e depois utilizada em `client = BasicClient(MCP_SERVER_URL, headers=headers)`.
252
-
253
- ⚠️ IMPORTANTE: Ao utilizar os serviços de interação com a Bia (**/agent/stream**, **/agent/message** ou **/agent/invoke**), os parâmetros já são automaticamente preenchidos e enviados pelos serviços.
254
-
255
- ### **Recuperando os parâmetros no MCP Server enviados via header**
249
+ ...existing code...
256
250
 
257
- Para recuperar os parâmetros no MCP Server que foram enviados por meio do `header` da requisição, basta utilizar a classe `Util` conforme a seguir:
251
+ Para recuperar os parâmetros no MCP Server que foram enviados por meio do `header` da requisição, basta utilizar a classe `BiaUtil` conforme a seguir:
258
252
 
259
253
  ```python
260
254
  from mcp.server.fastmcp import FastMCP
261
- from biatoolkit.util import Util
255
+ from biatoolkit.util import BiaUtil
262
256
 
263
257
  mcp = FastMCP(host="0.0.0.0", stateless_http=True)
264
258
 
@@ -266,7 +260,7 @@ mcp = FastMCP(host="0.0.0.0", stateless_http=True)
266
260
  def processar() -> str:
267
261
  """Executa o processamento de algo"""
268
262
 
269
- util = Util(mcp)
263
+ util = BiaUtil(mcp)
270
264
  header = util.get_header()
271
265
 
272
266
  # Exemplo de uso dos parâmetros do header. Utilize conforme a necessidade
@@ -296,11 +290,11 @@ Você pode utilizar parâmetros sensíveis de duas formas:
296
290
  - Usando o cofre de segredos do Bia Agent Builder para execução em ambiente produtivo.
297
291
  - Você pode adicionar parâmetros sensíveis no cofre de segredos do Bia Agent Builder. Para adicionar, alterar e excluir os parâmetros do cofre, utilize as funcionalidades da Plataforma Bia Agent Builder UI.
298
292
 
299
- Para recuperar um valor sensível no seu MCP Server, utilize o método `get_parameter(parameter_name: str)` da classe `Util`.
293
+ Para recuperar um valor sensível no seu MCP Server, utilize o método `get_parameter(parameter_name: str)` da classe `BiaUtil`.
300
294
 
301
295
  ```python
302
296
  from mcp.server.fastmcp import FastMCP
303
- from biatoolkit.util import Util
297
+ from biatoolkit.util import BiaUtil
304
298
 
305
299
  mcp = FastMCP(host="0.0.0.0", stateless_http=True)
306
300
 
@@ -308,7 +302,7 @@ mcp = FastMCP(host="0.0.0.0", stateless_http=True)
308
302
  def processar() -> str:
309
303
  """Executa o processamento de algo"""
310
304
 
311
- util = Util(mcp)
305
+ util = BiaUtil(mcp)
312
306
  valor = util.get_parameter("meu_parametro")
313
307
 
314
308
  # Exemplo de uso do parâmetro recuperado. Utilize conforme a necessidade
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='biatoolkit',
5
- version='1.0.2',
5
+ version='1.0.4',
6
6
  packages=find_packages(),
7
7
  install_requires=[],
8
8
  author='Bia Platform Team',
@@ -1,34 +0,0 @@
1
- from mcp import ClientSession
2
- from mcp.client.streamable_http import streamablehttp_client
3
-
4
- class BasicClient:
5
-
6
- def __init__(self, url: str = "http://0.0.0.0:8000/mcp", headers: dict = None):
7
- sufix = "/mcp"
8
- self.url = url if url.endswith(sufix) else f"{url}{sufix}"
9
- self.headers = headers
10
-
11
- async def list_tools(self) -> dict:
12
- """Lista as ferramentas disponíveis no MCP"""
13
- async with streamablehttp_client(self.url, self.headers, timeout=120, terminate_on_close=False) as (
14
- read_stream,
15
- write_stream,
16
- _,
17
- ):
18
- async with ClientSession(read_stream, write_stream) as session:
19
- await session.initialize()
20
- tool_result = await session.list_tools()
21
- return tool_result
22
-
23
- async def call_tool(self, tool_name: str, params: dict = None) -> dict:
24
- """Executa a ferramenta disponível no MCP"""
25
- async with streamablehttp_client(self.url, self.headers, timeout=120, terminate_on_close=False) as (
26
- read_stream,
27
- write_stream,
28
- _,
29
- ):
30
- async with ClientSession(read_stream, write_stream) as session:
31
- await session.initialize()
32
- result = await session.call_tool(tool_name, params)
33
- return result
34
-
@@ -1,52 +0,0 @@
1
- from mcp.server.fastmcp import FastMCP
2
- from .schema.header import Header
3
-
4
- import boto3
5
- import os
6
-
7
- class Util():
8
-
9
- HEADER_PREFIX = "x-amzn-bedrock-agentcore-runtime-custom"
10
-
11
- def __init__(self, mcp: FastMCP):
12
- self.mcp = mcp
13
-
14
- def __get_from_ssm(self, parameter_name: str) -> str:
15
- """Busca o parâmetro no AWS SSM Parameter Store"""
16
- ctx = self.mcp.get_context()
17
- headers = ctx.request_context.request.headers
18
- prefix = headers.get(f"{self.HEADER_PREFIX}-prefix", None)
19
- client = boto3.client('ssm', region_name="sa-east-1")
20
- try:
21
- response = client.get_parameter(
22
- Name=f"{prefix}/{parameter_name}",
23
- WithDecryption=True
24
- )
25
- except client.exceptions.ParameterNotFound:
26
- return None
27
- return response.get('Parameter').get('Value')
28
-
29
- def get_header(self) -> Header:
30
- """Retorna os parâmetros padrão contidos no header da requisição"""
31
- ctx = self.mcp.get_context()
32
- headers = ctx.request_context.request.headers
33
- return Header(
34
- current_host=headers.get(f"{self.HEADER_PREFIX}-current-host", None),
35
- user_email=headers.get(f"{self.HEADER_PREFIX}-user-email", None),
36
- jwt_token=headers.get(f"{self.HEADER_PREFIX}-jwt-token", None),
37
- jsessionid=headers.get(f"{self.HEADER_PREFIX}-jsessionid", None),
38
- organization_id=int(headers.get(f"{self.HEADER_PREFIX}-organization-id", 0)),
39
- codparc=int(headers.get(f"{self.HEADER_PREFIX}-codparc", 0)),
40
- iam_user_id=int(headers.get(f"{self.HEADER_PREFIX}-iam-user-id", 0)),
41
- gateway_token=headers.get(f"{self.HEADER_PREFIX}-gateway-token", None)
42
- )
43
-
44
- def get_parameter(self, parameter_name: str) -> str:
45
- """
46
- Retorna o valor do parâmetro, buscando primeiro na variável de
47
- ambiente e depois no AWS SSM Parameter Store.
48
- """
49
- return os.getenv(
50
- parameter_name,
51
- self.__get_from_ssm(parameter_name)
52
- )
File without changes