geronimo-pericoli commited on
Commit
7e25ccc
verified
1 Parent(s): 75b72b8

Update server.py

Browse files
Files changed (1) hide show
  1. server.py +31 -20
server.py CHANGED
@@ -98,22 +98,17 @@ mcp = FastMCP("OnBase", port=port)
98
 
99
 
100
 
101
- @mcp.resource("data://retrievers/list/{source}")
102
- async def retrievers_list_resource(ctx: Context, source: str) -> dict:
103
  """
104
- Resource interno que proporciona la lista de retrievers.
 
105
  """
106
  try:
107
- # Cargamos los metadatos desde el contexto
108
  retrievers_metadata = ctx.get("retrievers_metadata", {})
109
-
110
  available = []
111
- source_exists = source in retrievers_metadata if source != "all" else False
112
 
113
  for current_source, indexes in retrievers_metadata.items():
114
- if source_exists and current_source != source:
115
- continue
116
-
117
  for index_name, metadata in indexes.items():
118
  available.append({
119
  "name": index_name,
@@ -125,9 +120,7 @@ async def retrievers_list_resource(ctx: Context, source: str) -> dict:
125
  return {
126
  "retrievers": available,
127
  "count": len(available),
128
- "status": "success",
129
- "source_requested": source,
130
- "source_used": source if source_exists else "all"
131
  }
132
 
133
  except Exception as e:
@@ -135,25 +128,43 @@ async def retrievers_list_resource(ctx: Context, source: str) -> dict:
135
  "retrievers": [],
136
  "count": 0,
137
  "status": "error",
138
- "error": str(e),
139
- "source_requested": source,
140
- "source_used": "none"
141
  }
142
 
143
  @mcp.tool()
144
  async def list_retrievers(ctx: Context, source: str = None) -> dict:
145
  """
146
- Devuelve la lista de retrievers disponibles.
147
 
148
  Args:
149
  source (str, optional): Fuente para filtrar. Default None.
150
 
151
  Returns:
152
- dict: Lista de retrievers.
153
  """
154
- # Convertimos None a "all" para el resource
155
- source_param = "all" if source is None else source
156
- return await ctx.resources.read(f"data://retrievers/list/{source_param}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
 
158
 
159
 
 
98
 
99
 
100
 
101
+ @mcp.resource("data://retrievers/list")
102
+ async def retrievers_list_resource(ctx: Context) -> dict:
103
  """
104
+ Resource que devuelve todos los retrievers disponibles.
105
+ El filtrado por source se manejar谩 en el tool.
106
  """
107
  try:
 
108
  retrievers_metadata = ctx.get("retrievers_metadata", {})
 
109
  available = []
 
110
 
111
  for current_source, indexes in retrievers_metadata.items():
 
 
 
112
  for index_name, metadata in indexes.items():
113
  available.append({
114
  "name": index_name,
 
120
  return {
121
  "retrievers": available,
122
  "count": len(available),
123
+ "status": "success"
 
 
124
  }
125
 
126
  except Exception as e:
 
128
  "retrievers": [],
129
  "count": 0,
130
  "status": "error",
131
+ "error": str(e)
 
 
132
  }
133
 
134
  @mcp.tool()
135
  async def list_retrievers(ctx: Context, source: str = None) -> dict:
136
  """
137
+ Devuelve la lista de retrievers disponibles, opcionalmente filtrados por source.
138
 
139
  Args:
140
  source (str, optional): Fuente para filtrar. Default None.
141
 
142
  Returns:
143
+ dict: Lista de retrievers con metadatos.
144
  """
145
+ # Obtenemos todos los retrievers del resource
146
+ result = await ctx.resources.read("data://retrievers/list")
147
+
148
+ # Si hay error en el resource, lo propagamos
149
+ if result.get("status") == "error":
150
+ return result
151
+
152
+ # Filtramos por source si se especific贸
153
+ if source:
154
+ filtered = [r for r in result["retrievers"] if r["source"] == source]
155
+ return {
156
+ "retrievers": filtered,
157
+ "count": len(filtered),
158
+ "status": "success",
159
+ "source_requested": source,
160
+ "source_used": source if filtered else "none"
161
+ }
162
+
163
+ return {
164
+ **result,
165
+ "source_requested": None,
166
+ "source_used": "all"
167
+ }
168
 
169
 
170