biatoolkit 1.0.1__py3-none-any.whl → 1.0.3__py3-none-any.whl

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,34 +1,63 @@
1
1
  from mcp import ClientSession
2
2
  from mcp.client.streamable_http import streamablehttp_client
3
3
 
4
- class BasicClient:
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
+ """
5
9
 
6
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
+ """
7
18
  sufix = "/mcp"
19
+ # Garante que a URL termine com '/mcp'
8
20
  self.url = url if url.endswith(sufix) else f"{url}{sufix}"
9
21
  self.headers = headers
10
22
 
11
23
  async def list_tools(self) -> dict:
12
- """Lista as ferramentas disponíveis no MCP"""
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
13
31
  async with streamablehttp_client(self.url, self.headers, timeout=120, terminate_on_close=False) as (
14
32
  read_stream,
15
33
  write_stream,
16
34
  _,
17
35
  ):
36
+ # Cria uma sessão de cliente MCP usando os streams
18
37
  async with ClientSession(read_stream, write_stream) as session:
19
- await session.initialize()
20
- tool_result = await session.list_tools()
38
+ await session.initialize() # Inicializa a sessão
39
+ tool_result = await session.list_tools() # Solicita a lista de ferramentas
21
40
  return tool_result
22
41
 
23
42
  async def call_tool(self, tool_name: str, params: dict = None) -> dict:
24
- """Executa a ferramenta disponível no MCP"""
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
25
54
  async with streamablehttp_client(self.url, self.headers, timeout=120, terminate_on_close=False) as (
26
55
  read_stream,
27
56
  write_stream,
28
57
  _,
29
58
  ):
59
+ # Cria uma sessão de cliente MCP usando os streams
30
60
  async with ClientSession(read_stream, write_stream) as session:
31
- await session.initialize()
32
- result = await session.call_tool(tool_name, params)
61
+ await session.initialize() # Inicializa a sessão
62
+ result = await session.call_tool(tool_name, params) # Executa a ferramenta
33
63
  return result
34
-
biatoolkit/util.py CHANGED
@@ -4,32 +4,52 @@ from .schema.header import Header
4
4
  import boto3
5
5
  import os
6
6
 
7
- class Util():
7
+ class BiaUtil():
8
8
 
9
9
  HEADER_PREFIX = "x-amzn-bedrock-agentcore-runtime-custom"
10
10
 
11
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
+ """
12
18
  self.mcp = mcp
13
19
 
14
20
  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")
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
20
34
  try:
21
35
  response = client.get_parameter(
22
36
  Name=f"{prefix}/{parameter_name}",
23
37
  WithDecryption=True
24
38
  )
25
39
  except client.exceptions.ParameterNotFound:
26
- return None
27
- return response.get('Parameter').get('Value')
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
28
42
 
29
43
  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
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
33
53
  return Header(
34
54
  current_host=headers.get(f"{self.HEADER_PREFIX}-current-host", None),
35
55
  user_email=headers.get(f"{self.HEADER_PREFIX}-user-email", None),
@@ -43,9 +63,16 @@ class Util():
43
63
 
44
64
  def get_parameter(self, parameter_name: str) -> str:
45
65
  """
46
- Retorna o valor do parâmetro, buscando primeiro na variável de
47
- ambiente e depois no AWS SSM Parameter Store.
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.
48
74
  """
75
+ # Busca o valor na variável de ambiente, se não existir busca no SSM
49
76
  return os.getenv(
50
77
  parameter_name,
51
78
  self.__get_from_ssm(parameter_name)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: biatoolkit
3
- Version: 1.0.1
3
+ Version: 1.0.3
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
@@ -128,7 +128,7 @@ Crie um novo arquivo chamado `local.py` com o seguinte conteúdo:
128
128
 
129
129
  ```python
130
130
  import asyncio
131
- from biapack.basic_client import BasicClient
131
+ from biatoolkit.basic_client import BasicClient
132
132
 
133
133
  MCP_SERVER_URL = "http://0.0.0.0:8000/mcp"
134
134
  client = BasicClient(MCP_SERVER_URL)
@@ -169,7 +169,7 @@ python local.py
169
169
 
170
170
  Você deverá ver a saída no console semelhante a:
171
171
 
172
- ![Figura 02 - Cliente MCP listando tools do servidor](https://iili.io/fSAyhSp.png)
172
+ ![Figura 02 - Cliente MCP listando tools do servidor](https://iili.io/fS7lELN.png)
173
173
 
174
174
  Caso deseje testar a execução de uma **tool**, basta alterar o método `main` conforme a seguir:
175
175
 
@@ -185,7 +185,7 @@ Veja que o método `call_tool` possui dois parâmetros:
185
185
 
186
186
  Ao executar o arquivo `local.py`, você deverá ver a saída no console semelhante a:
187
187
 
188
- ![Figura 03 - Cliente MCP executando uma tool do servidor](https://iili.io/fSAywHN.png)
188
+ ![Figura 03 - Cliente MCP executando uma tool do servidor](https://iili.io/fS7l1Xp.png)
189
189
 
190
190
  ### **Enviando parâmetros via header**
191
191
 
@@ -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 biapack.basic_client import BasicClient
207
+ from biatoolkit.basic_client import BasicClient
208
208
 
209
209
  MCP_SERVER_URL = "http://0.0.0.0:8000/mcp"
210
210
 
@@ -258,7 +258,7 @@ Para recuperar os parâmetros no MCP Server que foram enviados por meio do `head
258
258
 
259
259
  ```python
260
260
  from mcp.server.fastmcp import FastMCP
261
- from biapack.util import Util
261
+ from biatoolkit.util import Util
262
262
 
263
263
  mcp = FastMCP(host="0.0.0.0", stateless_http=True)
264
264
 
@@ -300,7 +300,7 @@ Para recuperar um valor sensível no seu MCP Server, utilize o método `get_para
300
300
 
301
301
  ```python
302
302
  from mcp.server.fastmcp import FastMCP
303
- from biapack.util import Util
303
+ from biatoolkit.util import Util
304
304
 
305
305
  mcp = FastMCP(host="0.0.0.0", stateless_http=True)
306
306
 
@@ -0,0 +1,9 @@
1
+ biatoolkit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ biatoolkit/basic_client.py,sha256=_N2-NcrVWfm-rUuJUksOdR8GONmLYzooMhX1El49A3c,2581
3
+ biatoolkit/util.py,sha256=wP1r29MLVk27iMnMG_Xywa6Yt6H-XfHdlrb4u8Tmg6c,3288
4
+ biatoolkit/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ biatoolkit/schema/header.py,sha256=COJPlqK1cFvvWzDcCw2ru1jszWPgyyvabkjzDCc8AjM,683
6
+ biatoolkit-1.0.3.dist-info/METADATA,sha256=3kUZGId145VtBiInuRnFqwdy9sJMEqbKqAHUAGYB0BA,13181
7
+ biatoolkit-1.0.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
8
+ biatoolkit-1.0.3.dist-info/top_level.txt,sha256=DyrMS0X6u1FDA9uT854LxoT3X7gzMAlsFQabE-WuKMc,11
9
+ biatoolkit-1.0.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,9 +0,0 @@
1
- biatoolkit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- biatoolkit/basic_client.py,sha256=U4JW88QjaMv9VBspnCL_B6JBnGQk8oVH70cFrjNv63Y,1336
3
- biatoolkit/util.py,sha256=7Dm6dDd-9ju8hmnlv9BzHd_GHTU-2KiWA6d_gP9Ps9E,2081
4
- biatoolkit/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- biatoolkit/schema/header.py,sha256=COJPlqK1cFvvWzDcCw2ru1jszWPgyyvabkjzDCc8AjM,683
6
- biatoolkit-1.0.1.dist-info/METADATA,sha256=4eafNpCSce0LasQd5k6__SxUT85rLzyaAlN5S2z01o0,13169
7
- biatoolkit-1.0.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
8
- biatoolkit-1.0.1.dist-info/top_level.txt,sha256=DyrMS0X6u1FDA9uT854LxoT3X7gzMAlsFQabE-WuKMc,11
9
- biatoolkit-1.0.1.dist-info/RECORD,,