ApiLogicServer 14.5.3__py3-none-any.whl → 14.5.4__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.
- api_logic_server_cli/api_logic_server.py +2 -2
- api_logic_server_cli/api_logic_server_info.yaml +2 -2
- api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/dbml.py +3 -0
- api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/mcp_discovery.py +0 -43
- api_logic_server_cli/prototypes/basic_demo/customizations/database/system/SAFRSBaseX.py +4 -1
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_client_executor.py +122 -164
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.4.dist-info}/METADATA +1 -1
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.4.dist-info}/RECORD +13 -13
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.4.dist-info}/WHEEL +1 -1
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.4.dist-info}/entry_points.txt +0 -0
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.4.dist-info}/licenses/LICENSE +0 -0
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.4.dist-info}/top_level.txt +0 -0
|
@@ -12,10 +12,10 @@ ApiLogicServer CLI: given a database url, create [and run] customizable ApiLogic
|
|
|
12
12
|
Called from api_logic_server_cli.py, by instantiating the ProjectRun object.
|
|
13
13
|
'''
|
|
14
14
|
|
|
15
|
-
__version__ = "14.05.
|
|
15
|
+
__version__ = "14.05.04" # last public release: 14.05.00
|
|
16
16
|
recent_changes = \
|
|
17
17
|
f'\n\nRecent Changes:\n' +\
|
|
18
|
-
"\t05/
|
|
18
|
+
"\t05/20/2024 - 14.05.04: factored mcp filters with working date range (AND), email stub, use basic_demo custs for genai_demo \n"\
|
|
19
19
|
"\t05/16/2024 - 14.05.00: safrs 3.1.7, running mcp preview \n"\
|
|
20
20
|
"\t04/27/2024 - 14.04.00: Graphics preview, Vibe install fix, Improved IDE Chat Logic, MCP Exploration \n"\
|
|
21
21
|
"\t03/30/2024 - 14.03.25: WebGenAI fixes for Kafka and Keycloak \n"\
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
last_created_date: May
|
|
1
|
+
last_created_date: May 20, 2025 15:00:15
|
|
2
2
|
last_created_project_name: ../../../servers/basic_demo
|
|
3
|
-
last_created_version: 14.05.
|
|
3
|
+
last_created_version: 14.05.03
|
|
Binary file
|
|
@@ -74,6 +74,9 @@ class DBMLCreator(object):
|
|
|
74
74
|
"tool_type": "json-api",
|
|
75
75
|
"schema_version": "1.0",
|
|
76
76
|
"base_url": "http://localhost:5656/api",
|
|
77
|
+
"query_params": "- JSON:API custom filtering using a filter array (e.g., filter=[{\"name\":\"date_shipped\",\"op\":\"gt\",\"val\":\"2023-07-14\"}])",
|
|
78
|
+
"expected_response": "Respond with a JSON object with tool_type, schema_version, base_url, and an array of resources including: path, method, query_params array or body, headers, expected_output.",
|
|
79
|
+
"email_services": "iff email is requested, Send email by issing a POST request to the Email endpoint, setting the customer_id and message in the body.",
|
|
77
80
|
"description": f"API Logic Project: {self.mod_gen.project.project_name_last_node}",
|
|
78
81
|
"resources": [
|
|
79
82
|
]
|
api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/mcp_discovery.py
CHANGED
|
@@ -62,49 +62,6 @@ def add_service(app, api, project_dir, swagger_host: str, PORT: str, method_deco
|
|
|
62
62
|
pass
|
|
63
63
|
|
|
64
64
|
|
|
65
|
-
@app.route('/mcp_server_executor', methods=['GET'])
|
|
66
|
-
def mcp_server_executor(path=None):
|
|
67
|
-
''' sample response printed in mcp_client_executor.py:
|
|
68
|
-
FIXME - incorrect.
|
|
69
|
-
But do provide: https://localhost:5656/.well-known/mcp.json
|
|
70
|
-
```
|
|
71
|
-
MCP MCP Response (simulated):
|
|
72
|
-
{
|
|
73
|
-
"get_json": {
|
|
74
|
-
"filter": {
|
|
75
|
-
"filter": {
|
|
76
|
-
"credit_limit": {
|
|
77
|
-
"gt": 4000
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
"headers": {
|
|
81
|
-
"Accept": "application/vnd.api+json",
|
|
82
|
-
"Authorization": "Bearer your_token"
|
|
83
|
-
},
|
|
84
|
-
"type": "Customer",
|
|
85
|
-
"url": "http://localhost:5656/api/Customer"
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
"name": "mcp_server_executor",
|
|
89
|
-
"openapiUrl": "TUNNEL_URL/api/openapi.json",
|
|
90
|
-
"serverUrl": "TUNNEL_URL/api"
|
|
91
|
-
}
|
|
92
|
-
```
|
|
93
|
-
'''
|
|
94
|
-
get_json = request.get_json()
|
|
95
|
-
app_logger.info(f"mcp_server_executor sees mcp request: \n{json.dumps(get_json, indent=4)}")
|
|
96
|
-
|
|
97
|
-
# process verb, filter here (stub for now)
|
|
98
|
-
filter_json = get_json['filter'] # {"credit_limit": {"gt": 4000}} # todo: bunch'o parsing here
|
|
99
|
-
|
|
100
|
-
filter_json = {"name": "credit_limit", "op": "gt", "val":4000} # https://github.com/thomaxxl/safrs/wiki/JsonApi-filtering
|
|
101
|
-
filter = json.dumps(filter_json) # {"name": "credit_limit", "op": "gt", "val": 4000}
|
|
102
|
-
get_uri = get_json['url'] + '?filter=' + filter # get_uri = "http://localhost:5656/api/Customer?filter[credit_limit]=1000"
|
|
103
|
-
response = requests.get(url=get_uri, headers= request.headers)
|
|
104
|
-
|
|
105
|
-
return response.json(), 200, {'Content-Type': 'application/json; charset=utf-8'}
|
|
106
|
-
|
|
107
|
-
|
|
108
65
|
@app.route('/.well-known/mcp.json', methods=['GET'])
|
|
109
66
|
def mcp_discovery(path=None):
|
|
110
67
|
''' called by mcp_client_executor for discovery, eg:
|
|
@@ -118,7 +118,10 @@ class SAFRSBaseX(SAFRSBase, safrs.DB.Model):
|
|
|
118
118
|
op = getattr(operator, op_name)
|
|
119
119
|
expressions.append(op(attr, attr_val))
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
if len(filters) > 1:
|
|
122
|
+
return query.filter(operator.and_(*expressions))
|
|
123
|
+
else:
|
|
124
|
+
return query.filter(*expressions)
|
|
122
125
|
|
|
123
126
|
|
|
124
127
|
class TestBase(Base):
|
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_client_executor.py
CHANGED
|
@@ -10,12 +10,6 @@ Notes:
|
|
|
10
10
|
* See: integration/mcp/README_mcp.md
|
|
11
11
|
* python api_logic_server_run.py
|
|
12
12
|
|
|
13
|
-
ToDo - email example is incomplete:
|
|
14
|
-
1. Add email event handler (ala nw_sample/logic/declare_logic.py#send_n8n_message())
|
|
15
|
-
2. And, respect the customer email_opt_out
|
|
16
|
-
3. Needs to use date range
|
|
17
|
-
4. Data incomplete
|
|
18
|
-
|
|
19
13
|
"""
|
|
20
14
|
|
|
21
15
|
import json
|
|
@@ -85,35 +79,19 @@ def discover_mcp_servers():
|
|
|
85
79
|
|
|
86
80
|
def get_user_nl_query():
|
|
87
81
|
""" Get the natural language query from the user.
|
|
82
|
+
Add instructions for the LLM to generate a tool context block.
|
|
88
83
|
|
|
89
84
|
"""
|
|
90
85
|
|
|
91
86
|
global test_type
|
|
92
87
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
default_request = "List the orders for customer 5, and send a discount email to the customer for each one."
|
|
102
|
-
default_request = "List the unshipped orders created before 2023-07-14, and send a discount email to the customer for each one."
|
|
103
|
-
|
|
104
|
-
if test_type != 'orchestration':
|
|
105
|
-
default_request = "List customers with credit over 1000"
|
|
106
|
-
|
|
107
|
-
query = sys.argv[1] if len(sys.argv) > 1 else default_request
|
|
108
|
-
|
|
109
|
-
query += """
|
|
110
|
-
Respond with a JSON array of tool context blocks using:
|
|
111
|
-
- tool: 'json-api'
|
|
112
|
-
- JSON:API custom filtering (e.g., filter=[{"name":"date_shipped","op":"gt","val":"2023-07-14"}])
|
|
113
|
-
- Use {{ order.customer_id }} as a placeholder in the second step.
|
|
114
|
-
- Include method, url, query_params or body, headers, expected_output.
|
|
115
|
-
"""
|
|
116
|
-
return query
|
|
88
|
+
if len(sys.argv) > 1 and sys.argv[1] != 'go':
|
|
89
|
+
request = sys.argv[1]
|
|
90
|
+
else:
|
|
91
|
+
request = "List the unshipped orders created before 2023-07-14, and send a discount email to the customer for each one."
|
|
92
|
+
if test_type != 'orchestration':
|
|
93
|
+
request = "List customers with credit over 1000"
|
|
94
|
+
return request
|
|
117
95
|
|
|
118
96
|
|
|
119
97
|
def query_llm_with_nl(nl_query):
|
|
@@ -138,14 +116,17 @@ def query_llm_with_nl(nl_query):
|
|
|
138
116
|
|
|
139
117
|
# setup default tool_context to bypass LLM call and save 2-3 secs in testing
|
|
140
118
|
if test_type == 'orchestration': # orchestration: emails to pending orders
|
|
119
|
+
|
|
141
120
|
tool_context = \
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
"
|
|
121
|
+
{
|
|
122
|
+
"tool_type": "json-api",
|
|
123
|
+
"schema_version": "1.0",
|
|
124
|
+
"base_url": "http://localhost:5656/api",
|
|
125
|
+
"resources": [
|
|
126
|
+
{
|
|
127
|
+
"path": "/Order",
|
|
128
|
+
"method": "GET",
|
|
129
|
+
"query_params": [
|
|
149
130
|
{
|
|
150
131
|
"name": "date_shipped",
|
|
151
132
|
"op": "eq",
|
|
@@ -156,46 +137,42 @@ def query_llm_with_nl(nl_query):
|
|
|
156
137
|
"op": "lt",
|
|
157
138
|
"val": "2023-07-14"
|
|
158
139
|
}
|
|
159
|
-
]
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
"Content-Type": "application/json"
|
|
140
|
+
],
|
|
141
|
+
"headers": [],
|
|
142
|
+
"expected_output": []
|
|
163
143
|
},
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
"
|
|
172
|
-
"
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
},
|
|
178
|
-
"expected_output": "Confirmation of email sent"
|
|
179
|
-
}
|
|
180
|
-
]
|
|
181
|
-
else: # simple get request - list customers with credit over 4000
|
|
144
|
+
{
|
|
145
|
+
"path": "/Email",
|
|
146
|
+
"method": "POST",
|
|
147
|
+
"body": {
|
|
148
|
+
"customer_id": "{{ order.customer_id }}",
|
|
149
|
+
"message": "You have a discount on your unshipped order."
|
|
150
|
+
},
|
|
151
|
+
"headers": [],
|
|
152
|
+
"expected_output": []
|
|
153
|
+
}
|
|
154
|
+
]
|
|
155
|
+
}
|
|
156
|
+
else: # simple get request - list customers with credit over 1000
|
|
182
157
|
tool_context = \
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
"
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
158
|
+
{
|
|
159
|
+
"tool_type": "json-api",
|
|
160
|
+
"schema_version": "1.0",
|
|
161
|
+
"base_url": "http://localhost:5656/api",
|
|
162
|
+
"resources": [
|
|
163
|
+
{
|
|
164
|
+
"path": "/Customer",
|
|
165
|
+
"method": "GET",
|
|
166
|
+
"query_params": [
|
|
167
|
+
{
|
|
168
|
+
"name": "credit_limit",
|
|
169
|
+
"op": "gt",
|
|
170
|
+
"val": "1000"
|
|
171
|
+
}
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
]
|
|
175
|
+
} # Call the OpenAI API to generate the tool context
|
|
199
176
|
if create_tool_context_from_llm: # saves 2-3 seconds...
|
|
200
177
|
response = openai.chat.completions.create(
|
|
201
178
|
model="gpt-4",
|
|
@@ -204,13 +181,17 @@ def query_llm_with_nl(nl_query):
|
|
|
204
181
|
)
|
|
205
182
|
|
|
206
183
|
tool_context_str = response.choices[0].message.content
|
|
184
|
+
tool_context_str_no_cr = tool_context_str.replace("\n", '') # convert single quotes to double quotes
|
|
207
185
|
try:
|
|
208
|
-
tool_context = json.loads(
|
|
186
|
+
tool_context = json.loads(tool_context_str_no_cr)
|
|
209
187
|
except json.JSONDecodeError:
|
|
210
188
|
print("Failed to decode JSON from response:", tool_context_str)
|
|
211
189
|
return None
|
|
212
190
|
|
|
213
|
-
print("\
|
|
191
|
+
print("\n\n2a. LLM request:\n", json.dumps(messages, indent=4))
|
|
192
|
+
print("\n2b. NL Query:\n", nl_query)
|
|
193
|
+
print("\n2c. schema_text: \n", json.dumps(json.loads(schema_text), indent=4)) #schema_text[0:100])
|
|
194
|
+
print("\n2d. generated tool context from LLM:\n", json.dumps(tool_context, indent=4))
|
|
214
195
|
return tool_context
|
|
215
196
|
|
|
216
197
|
|
|
@@ -232,104 +213,81 @@ def process_tool_context(tool_context):
|
|
|
232
213
|
def get_query_param_filter(query_params):
|
|
233
214
|
""" return json:api filter
|
|
234
215
|
|
|
235
|
-
see api_logic_server_cli/prototypes/base/api/system/expression_parser.py (doc?)
|
|
236
|
-
|
|
237
216
|
eg
|
|
238
|
-
curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"eq","val":null},{"name":"CreatedOn","op":"
|
|
217
|
+
curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"eq","val":null},{"name":"CreatedOn","op":"lt","val":"2023-07-14"}]'
|
|
218
|
+
|
|
219
|
+
curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"gt","val":"2023-07-14"}]'
|
|
220
|
+
curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"eq","val":null}]'
|
|
221
|
+
curl -qg 'http://localhost:5656/api/Customer?filter=[{"name":"credit_limit","op":"gt","val":"1000"}]'
|
|
239
222
|
|
|
240
223
|
query_params might be simple:
|
|
241
|
-
"query_params": {
|
|
242
|
-
"filter[credit_limit][gt]": 1000 }
|
|
224
|
+
"query_params": [ {"name": "credit_limit", "op": "gt", "val": "1000"} ]
|
|
243
225
|
==> ?filter=[{"name":"credit_limit","op":"gt","val":"1000"}]
|
|
226
|
+
|
|
244
227
|
or a list:
|
|
245
|
-
"query_params":
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
},
|
|
228
|
+
"query_params": [
|
|
229
|
+
{
|
|
230
|
+
"name": "date_shipped",
|
|
231
|
+
"op": "eq",
|
|
232
|
+
"val": None
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"name": "date_created",
|
|
236
|
+
"op": "lt",
|
|
237
|
+
"val": "2023-07-14"
|
|
238
|
+
}
|
|
239
|
+
],
|
|
240
|
+
|
|
259
241
|
"""
|
|
260
242
|
|
|
261
243
|
added_rows = 0
|
|
262
244
|
|
|
263
245
|
query_param_filter = ''
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
if each_block["method"] == "GET":
|
|
307
|
-
query_param_filter = get_query_param_filter(each_block["query_params"])
|
|
308
|
-
mcp_response = requests.get(
|
|
309
|
-
url = each_block["url"],
|
|
310
|
-
headers=each_block["headers"],
|
|
311
|
-
params=query_param_filter
|
|
246
|
+
assert isinstance(query_params, list), "Query Params filter expected to be a list"
|
|
247
|
+
query_param_filter = 'filter=' + str(query_params)
|
|
248
|
+
# use urlencode to convert to JSON:API format...
|
|
249
|
+
# val urllib.parse.quote() or urllib.parse.urlencode()
|
|
250
|
+
# tool instructions... filtering, email etc
|
|
251
|
+
query_param_filter = query_param_filter.replace("'", '"') # convert single quotes to double quotes
|
|
252
|
+
query_param_filter = query_param_filter.replace("None", 'null')
|
|
253
|
+
query_param_filter = query_param_filter.replace("date_created", 'CreatedOn') # TODO - why this name?
|
|
254
|
+
return query_param_filter # end get_query_param_filter
|
|
255
|
+
|
|
256
|
+
assert isinstance(tool_context, (dict, list)), "Tool context expected to be a dictionary"
|
|
257
|
+
context_data = {}
|
|
258
|
+
added_rows = 0
|
|
259
|
+
|
|
260
|
+
for each_block in tool_context["resources"]:
|
|
261
|
+
if True: # TODO - add check for "tool": "json-api"
|
|
262
|
+
if each_block["method"] == "GET":
|
|
263
|
+
query_param_filter = get_query_param_filter(each_block["query_params"])
|
|
264
|
+
headers = {"Content-Type": "application/vnd.api+json"}
|
|
265
|
+
if "headers" in each_block:
|
|
266
|
+
headers.update(each_block["headers"])
|
|
267
|
+
mcp_response = requests.get(
|
|
268
|
+
url = tool_context["base_url"] + each_block["path"],
|
|
269
|
+
headers=headers,
|
|
270
|
+
params=query_param_filter
|
|
271
|
+
)
|
|
272
|
+
context_data = mcp_response.json()['data'] # result rows...
|
|
273
|
+
elif each_block["method"] in ["POST"]:
|
|
274
|
+
for each_order in context_data:
|
|
275
|
+
url = tool_context["base_url"] + each_block["path"]
|
|
276
|
+
json_update_data = { 'data': {"type": "Email", 'attributes': {} } }
|
|
277
|
+
json_update_data_attributes = json_update_data["data"]["attributes"]
|
|
278
|
+
json_update_data_attributes["customer_id"] = context_data[0]['attributes']["customer_id"] # TODO - fix
|
|
279
|
+
json_update_data_attributes["message"] = each_block["body"]["message"]
|
|
280
|
+
# eg: POST http://localhost:5656/api/Email {'data': {'type': 'Email', 'attributes': {'customer_id': 5, 'message': {'to': '{{ order.customer_id }}', 'subject': 'Discount for your order', 'body': 'Dear customer, you have a discount for your recent order. Thank you for shopping with us.'}}}}
|
|
281
|
+
headers = {"Content-Type": "application/vnd.api+json"}
|
|
282
|
+
if "headers" in each_block:
|
|
283
|
+
headers.update(each_block["headers"])
|
|
284
|
+
mcp_response = requests.post(
|
|
285
|
+
url=url,
|
|
286
|
+
headers=headers,
|
|
287
|
+
json=json_update_data
|
|
312
288
|
)
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
for each_order in context_data:
|
|
316
|
-
url = each_block["url"]
|
|
317
|
-
url = url.replace("sendEmail", "Email") # TODO name fix
|
|
318
|
-
json_update_data = { 'data': {"type": "Email", 'attributes': {} } }
|
|
319
|
-
json_update_data_attributes = json_update_data["data"]["attributes"]
|
|
320
|
-
json_update_data_attributes["customer_id"] = context_data[0]['attributes']["customer_id"] # TODO - fix
|
|
321
|
-
json_update_data_attributes["message"] = each_block["body"]["message"]
|
|
322
|
-
# eg: POST http://localhost:5656/api/Email {'data': {'type': 'Email', 'attributes': {'customer_id': 5, 'message': {'to': '{{ order.customer_id }}', 'subject': 'Discount for your order', 'body': 'Dear customer, you have a discount for your recent order. Thank you for shopping with us.'}}}}
|
|
323
|
-
mcp_response = requests.post(
|
|
324
|
-
url=url,
|
|
325
|
-
headers=each_block["headers"],
|
|
326
|
-
json=json_update_data
|
|
327
|
-
)
|
|
328
|
-
added_rows += 1
|
|
329
|
-
pass
|
|
330
|
-
else:
|
|
331
|
-
print("Invalid tool context format. Expected a dictionary or a list.")
|
|
332
|
-
return None
|
|
289
|
+
added_rows += 1
|
|
290
|
+
pass
|
|
333
291
|
print("\n3. MCP Server (als) Response:\n", mcp_response.text)
|
|
334
292
|
if added_rows > 0:
|
|
335
293
|
print(f"...Added {added_rows} rows to the database; last row (only) shown above.")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
api_logic_server_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
api_logic_server_cli/api_logic_server.py,sha256=
|
|
3
|
-
api_logic_server_cli/api_logic_server_info.yaml,sha256=
|
|
2
|
+
api_logic_server_cli/api_logic_server.py,sha256=OHqr-j3QJ8Tb1EoZ7VsVC2vaDBdHB0dE9HTm38k4syk,103459
|
|
3
|
+
api_logic_server_cli/api_logic_server_info.yaml,sha256=IvDL2v5t7-wMjc9LnmowvQ-HYvLcY0WAmYNmMp3WfIg,127
|
|
4
4
|
api_logic_server_cli/cli.py,sha256=AT1cWszOygHWIbpxDoXFhaTeSai3Tf5SbGoXvN4h510,83134
|
|
5
5
|
api_logic_server_cli/cli_args_base.py,sha256=lr27KkOB7_WpZwTs7LgiK8LKDIHMKQkoZCTnE99BFxw,3280
|
|
6
6
|
api_logic_server_cli/cli_args_project.py,sha256=I5no_fGRV_ZsK3SuttVDAaQYI4Q5zCjx6LojGkM024w,4645
|
|
@@ -13,7 +13,7 @@ api_logic_server_cli/create_from_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JC
|
|
|
13
13
|
api_logic_server_cli/create_from_model/api_expose_api_models_creator.py,sha256=V-u3Hm404doztw66YuD2A043RCFmtw5QF5tMioC_1b0,7900
|
|
14
14
|
api_logic_server_cli/create_from_model/api_logic_server_utils.py,sha256=64rPLahX-FUu_1AhZlpHf4ljjWnQsYP0g-Ikhjd5pO8,25863
|
|
15
15
|
api_logic_server_cli/create_from_model/create_db_from_model.py,sha256=2H7slGnk39XOSnvL7vxrg6Ewx4bxeBJBgLo8fcXHTB4,4382
|
|
16
|
-
api_logic_server_cli/create_from_model/dbml.py,sha256=
|
|
16
|
+
api_logic_server_cli/create_from_model/dbml.py,sha256=mNI0ga6e9paPOodt1Ora5wKOuOQT4-yPaECnud-9WGc,11520
|
|
17
17
|
api_logic_server_cli/create_from_model/meta_model.py,sha256=ERf7tSgnSJSeRMVyggkdg-lvORQZSbfK0KMpL63qSEY,5837
|
|
18
18
|
api_logic_server_cli/create_from_model/model_creation_services.py,sha256=B86ljgUR98H_dCaxqiw-flrbvc05-XXtkC5It2BSezs,41479
|
|
19
19
|
api_logic_server_cli/create_from_model/ont_build.py,sha256=5BcmM0xW-0vjr9J_u1o0_3joLfKhcLeDWP31dcy5dzI,67028
|
|
@@ -24,7 +24,7 @@ api_logic_server_cli/create_from_model/__pycache__/__init__.cpython-312.pyc,sha2
|
|
|
24
24
|
api_logic_server_cli/create_from_model/__pycache__/api_expose_api_models_creator.cpython-312.pyc,sha256=3wtCiVHOjOgIonZOgnCsF2p01zcXIapx1_Tq2LwzY6Q,6989
|
|
25
25
|
api_logic_server_cli/create_from_model/__pycache__/api_logic_server_utils.cpython-312.pyc,sha256=oaOOqBJogGZdW5nVn93zqOY552sumaX5fGANDN42eCQ,26691
|
|
26
26
|
api_logic_server_cli/create_from_model/__pycache__/create_db_from_model.cpython-312.pyc,sha256=5eE8pIEa-OoUOk0xn_b78cCc9dSmxjTMn3HGJbxbFY4,4799
|
|
27
|
-
api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc,sha256=
|
|
27
|
+
api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc,sha256=MBYbBeyx-uApkD5Nyz1NDWdRoH6QDuEjvKDMaEiGCz4,12418
|
|
28
28
|
api_logic_server_cli/create_from_model/__pycache__/meta_model.cpython-312.pyc,sha256=BH5Cflj8YKf0CVkHpIZ_3eBbHXhwIWbwsrzM7DsEikE,7098
|
|
29
29
|
api_logic_server_cli/create_from_model/__pycache__/model_creation_services.cpython-312.pyc,sha256=_pJPTvkJL22Eu1BWM48VfXcyapD366OnXBqHGn-wtO0,36462
|
|
30
30
|
api_logic_server_cli/create_from_model/__pycache__/ont_build.cpython-312.pyc,sha256=Hni6k7GidAkkz-YO2kvmQOMYdCdCWvGWxX3HIPjj1eE,75285
|
|
@@ -691,17 +691,17 @@ api_logic_server_cli/prototypes/base/venv_setup/venv.ps1,sha256=_-LfKkLw5HOkZsF5
|
|
|
691
691
|
api_logic_server_cli/prototypes/base/venv_setup/venv.sh,sha256=aWX9fa8fe6aO9ifBIZEgGY5UGh4I0arOoCwBzDsxgU8,893
|
|
692
692
|
api_logic_server_cli/prototypes/basic_demo/README.md,sha256=COAWgXJGu0Xn6BHTeLyn9I39xcYHCKBslix7L2Xrodw,13487
|
|
693
693
|
api_logic_server_cli/prototypes/basic_demo/customizations/api/.DS_Store,sha256=6F7pphfwiMhILhl_J6yVhDZFYXmar5V92iLCzSkfnyA,6148
|
|
694
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/mcp_discovery.py,sha256=
|
|
694
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/mcp_discovery.py,sha256=mj9TCcijmjpkEE1MyCy-pWF4W5YZqgwuzPE_I-OgEuM,3738
|
|
695
695
|
api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/openapi.py,sha256=kLQ7Fn1J7tzuNJHBXF2AiwtzvQ-0JxJ6z-MfFryAtLk,3887
|
|
696
696
|
api_logic_server_cli/prototypes/basic_demo/customizations/config/default.env,sha256=-rjXJrjR4vjMr9YCVYVchaJw7qMBlbvQ3KfR_wri_XM,412
|
|
697
697
|
api_logic_server_cli/prototypes/basic_demo/customizations/config/server_setup.py,sha256=bV48ou0jSEm2o5yhTVgms1w7rqU9Ccf_2yfZip3ivJk,15441
|
|
698
698
|
api_logic_server_cli/prototypes/basic_demo/customizations/database/db.sqlite,sha256=VAhzjdz9_LTQNE6lVprZuliyHBGjQOggulM099cinSQ,24576
|
|
699
699
|
api_logic_server_cli/prototypes/basic_demo/customizations/database/models.py,sha256=Hi4m_ivLPE3i2HNfC-rXEADE_toWBHcLelYAQBzV_oA,4499
|
|
700
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/database/system/SAFRSBaseX.py,sha256=
|
|
700
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/database/system/SAFRSBaseX.py,sha256=RbYTrB5X-WvsqXQRjl0gk4KvUziRLU7hbljlIzd_N3g,5377
|
|
701
701
|
api_logic_server_cli/prototypes/basic_demo/customizations/integration/.DS_Store,sha256=nfyHG63vXNerWIrSwk76tTujqqB25mRZZZ04VJmxlCQ,6148
|
|
702
702
|
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
|
703
703
|
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/README_mcp.md,sha256=ZXLgtvqQCcGouxFE_7pu6OA3Qu1Qm3Jh-gcQxuFKb_w,1216
|
|
704
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_client_executor.py,sha256
|
|
704
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_client_executor.py,sha256=xvjsT90ADAE3CgH6rRkIudl6n1dLzIQ92y7VyDQjKhg,12906
|
|
705
705
|
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_schema.txt,sha256=qmov7e0NdYiQTCxNJU2xzxf9HnYeXFej-c8GSB-y6MM,1143
|
|
706
706
|
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_server_discovery.json,sha256=TUyInb67AWoGw7XFE9iDZxmM8UEID-ahQmdmzpF9AmQ,188
|
|
707
707
|
api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/3_executor_test_agent.py,sha256=vH-3wJvQE99LDt9ID3wWtVw1EOv8yJJNipPGgYINAus,1251
|
|
@@ -6092,9 +6092,9 @@ api_logic_server_cli/tools/mini_skel/database/system/SAFRSBaseX.py,sha256=p8C7AF
|
|
|
6092
6092
|
api_logic_server_cli/tools/mini_skel/database/system/TestDataBase.py,sha256=U02SYqThsbY5g3DX7XGaiMxjZBuOpzvtPS6RfI1WQFg,371
|
|
6093
6093
|
api_logic_server_cli/tools/mini_skel/logic/declare_logic.py,sha256=fTrlHyqMeZsw_TyEXFa1VlYBL7fzjZab5ONSXO7aApo,175
|
|
6094
6094
|
api_logic_server_cli/tools/mini_skel/logic/load_verify_rules.py,sha256=Rr5bySJpYCZmNPF2h-phcPJ53nAOPcT_ohZpCD93-a0,7530
|
|
6095
|
-
apilogicserver-14.5.
|
|
6096
|
-
apilogicserver-14.5.
|
|
6097
|
-
apilogicserver-14.5.
|
|
6098
|
-
apilogicserver-14.5.
|
|
6099
|
-
apilogicserver-14.5.
|
|
6100
|
-
apilogicserver-14.5.
|
|
6095
|
+
apilogicserver-14.5.4.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
|
|
6096
|
+
apilogicserver-14.5.4.dist-info/METADATA,sha256=o8jWHHSSx1vHUi4gHUrrvTT6ckmIkrvQbiXR_UFAOEc,6524
|
|
6097
|
+
apilogicserver-14.5.4.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
|
|
6098
|
+
apilogicserver-14.5.4.dist-info/entry_points.txt,sha256=KiLloZJ3c_RW-nIDqBtoE0WEsQTnZ3dELwHLWi23LMA,103
|
|
6099
|
+
apilogicserver-14.5.4.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
|
|
6100
|
+
apilogicserver-14.5.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|