ApiLogicServer 15.0.0__py3-none-any.whl → 15.0.9__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.
Files changed (36) hide show
  1. api_logic_server_cli/add_cust/add_cust.py +8 -2
  2. api_logic_server_cli/api_logic_server.py +2 -1
  3. api_logic_server_cli/api_logic_server_info.yaml +3 -3
  4. api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc +0 -0
  5. api_logic_server_cli/create_from_model/dbml.py +1 -0
  6. api_logic_server_cli/genai/genai_svcs.py +5 -2
  7. api_logic_server_cli/prototypes/base/api/api_discovery/mcp_discovery.py +63 -24
  8. api_logic_server_cli/prototypes/base/config/logging.yml +5 -0
  9. api_logic_server_cli/prototypes/base/config/server_setup.py +73 -0
  10. api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_discovery_response.json +150 -0
  11. api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_request.prompt +46 -0
  12. api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_tool_context_response.json +34 -0
  13. api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_tool_context_response_get.json +18 -0
  14. api_logic_server_cli/prototypes/base/integration/mcp/mcp_client_executor.py +129 -275
  15. api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/mcp_client_executor_request.py +11 -282
  16. api_logic_server_cli/prototypes/basic_demo/customizations/ui/admin/admin.yaml +3 -3
  17. api_logic_server_cli/prototypes/basic_demo/customizations/ui/admin/home.js +48 -0
  18. api_logic_server_cli/prototypes/manager/system/genai/mcp_learning/mcp.prompt +12 -0
  19. {apilogicserver-15.0.0.dist-info → apilogicserver-15.0.9.dist-info}/METADATA +1 -1
  20. {apilogicserver-15.0.0.dist-info → apilogicserver-15.0.9.dist-info}/RECORD +25 -31
  21. api_logic_server_cli/prototypes/base/integration/mcp/README_mcp.md +0 -15
  22. api_logic_server_cli/prototypes/base/integration/mcp/test_notes.txt +0 -37
  23. api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/mcp_discovery.py +0 -96
  24. api_logic_server_cli/prototypes/basic_demo/customizations/config/server_setup.py +0 -388
  25. api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/.DS_Store +0 -0
  26. api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/README_mcp.md +0 -15
  27. api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/Zmcp_client_executor.py +0 -294
  28. api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_schema.txt +0 -47
  29. api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_server_discovery.json +0 -9
  30. api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_tool_context.json +0 -25
  31. api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/test_notes.txt +0 -37
  32. /api_logic_server_cli/prototypes/base/integration/mcp/{mcp_schema.txt → examples/mcp_schema.txt} +0 -0
  33. {apilogicserver-15.0.0.dist-info → apilogicserver-15.0.9.dist-info}/WHEEL +0 -0
  34. {apilogicserver-15.0.0.dist-info → apilogicserver-15.0.9.dist-info}/entry_points.txt +0 -0
  35. {apilogicserver-15.0.0.dist-info → apilogicserver-15.0.9.dist-info}/licenses/LICENSE +0 -0
  36. {apilogicserver-15.0.0.dist-info → apilogicserver-15.0.9.dist-info}/top_level.txt +0 -0
@@ -1,279 +1,17 @@
1
1
  """
2
- This simulates the MCP Client Executor,
3
- which takes a natural language query and converts it into a tool context block:
4
-
5
- 1. Discovers MCP servers (from config)
6
- 2. Queries OpenAI's GPT-4 model to obtain the tool context based on a provided schema and a natural language query
7
- 3. Processes the tool context (calls the indicated MCP (als) endpoints)
8
-
9
- Notes:
10
- * See: integration/mcp/README_mcp.md
11
- * python api_logic_server_run.py
12
-
2
+ Invokes MCP client executor to process MCP requests when a new SysMcp row is inserted.
13
3
  """
14
4
 
15
5
  import json
16
- import os, sys
6
+ import os, logging
17
7
  from typing import Dict, List
18
8
  import openai
19
9
  import requests
20
- from logic_bank.exec_row_logic.logic_row import LogicRow
21
10
  from logic_bank.logic_bank import Rule
11
+ from logic_bank.exec_row_logic.logic_row import LogicRow
22
12
  from database import models
23
13
  from logic_bank.util import ConstraintException
24
-
25
- # Set your OpenAI API key
26
- openai.api_key = os.getenv("APILOGICSERVER_CHATGPT_APIKEY")
27
-
28
- server_url = os.getenv("APILOGICSERVER_URL", "http://localhost:5656/api")
29
-
30
- # debug settings
31
- test_type = 'orchestration' # 'simple_get' or 'orchestration'
32
- create_tool_context_from_llm = True
33
- ''' set to False to bypass LLM call and save 2-3 secs in testing '''
34
- use_test_schema = False
35
- ''' True means bypass discovery, use hard-coded schedma file '''
36
-
37
- def discover_mcp_servers():
38
- """ Discover the MCP servers by calling the /api/.well-known/mcp.json endpoint.
39
- This function retrieves the list of available MCP servers and their capabilities.
40
- """
41
- global server_url, use_test_schema
42
-
43
- # create schema_text (for prompt), by reading integration/mcp/mcp_schema.txt
44
-
45
- # find the servers - read the mcp_server_discovery.json file
46
- discovery_file_path = os.path.join(os.path.dirname(__file__), "../../integration/mcp/mcp_server_discovery.json")
47
- try:
48
- with open(discovery_file_path, "r") as discovery_file:
49
- discovery_data = json.load(discovery_file)
50
- print(f"\n1. Discovered MCP servers from config file: {discovery_file_path}:" + json.dumps(discovery_data, indent=4))
51
- except FileNotFoundError:
52
- print(f"Discovery file not found at {discovery_file_path}.")
53
- except json.JSONDecodeError as e:
54
- print(f"Error decoding JSON from {discovery_file_path}: {e}")
55
-
56
- for each_server in discovery_data["servers"]:
57
- discovery_url = each_server["schema_url"]
58
-
59
- # Call the discovery_url to get the MCP/API schema
60
- try:
61
- response = requests.get(discovery_url)
62
- if response.status_code == 200:
63
- api_schema = response.json()
64
- print()
65
- request_print = json.dumps(api_schema, indent=4)[0:400] + '\n... etc' # limit for readability
66
- print(f"\n\nAPI Schema from discovery schema_url: {discovery_url}:\n" + request_print)
67
- else:
68
- print(f"Failed to retrieve API schema from {discovery_url}: {response.status_code}")
69
- except requests.RequestException as e:
70
- print(f"Error calling OpenAPI URL: {e}")
71
- return json.dumps(api_schema)
72
-
73
-
74
- def get_user_nl_query_and_training(query: str):
75
- """ Get the natural language query from the user.
76
- Add training for the LLM to generate a tool context block.
77
-
78
- """
79
-
80
- global test_type
81
- # read file docs/mcp_learning/mcp.prompt
82
- prompt_file_path = os.path.join(os.path.dirname(__file__), "../../docs/mcp_learning/mcp.prompt")
83
- if os.path.exists(prompt_file_path):
84
- with open(prompt_file_path, "r") as prompt_file:
85
- training_prompt = prompt_file.read()
86
- # print(f"\nLoaded training prompt from {prompt_file_path}:\n{training_prompt}")
87
- else:
88
- training_prompt = ""
89
- print(f"Prompt file not found at {prompt_file_path}.")
90
- return query + "\n\n" + training_prompt
91
-
92
-
93
- def query_llm_with_nl(schema_text, nl_query):
94
- """
95
- Query the LLM with a natural language query and schema text to generate a tool context block.
96
-
97
- It handles both orchestration and simple GET requests.
98
- """
99
-
100
- global test_type, create_tool_context_from_llm
101
-
102
- content = f"Natural language query:\n {nl_query}\nSchema:\n{schema_text}"
103
- messages = [
104
- {
105
- "role": "system",
106
- "content": "You are an API planner that converts natural language queries into MCP Tool Context blocks using JSON:API. Return only the tool context as JSON."
107
- },
108
- {
109
- "role": "user",
110
- "content": f"{content}"
111
- }
112
- ]
113
-
114
- request_print = content[0:1200] + '\n... etc' # limit for readability
115
- print("\n\n2a. LLM request:\n", request_print)
116
- # print("\n2b. NL Query:\n", nl_query)
117
- # print("\n2c. schema_text: (truncated) \n")
118
- # schema_print = json.dumps(json.loads(schema_text), indent=4)[:400] # limit for readability
119
- # print(schema_print)
120
-
121
- if create_tool_context_from_llm: # takes 2-3 seconds...
122
- response = openai.chat.completions.create(
123
- model="gpt-4",
124
- messages=messages,
125
- temperature=0.2
126
- )
127
-
128
- tool_context_str = response.choices[0].message.content
129
- tool_context_str_no_cr = tool_context_str.replace("\n", '') # convert single quotes to double quotes
130
- try:
131
- tool_context = json.loads(tool_context_str_no_cr)
132
- except json.JSONDecodeError:
133
- print("Failed to decode JSON from response:", tool_context_str)
134
- return None
135
-
136
- print("\n2d. generated tool context from LLM:\n", json.dumps(tool_context, indent=4))
137
-
138
- if "resources" not in tool_context:
139
- raise ConstraintException("GenAI Error - LLM response does not contain 'resources'.")
140
- return tool_context
141
-
142
-
143
- def process_tool_context(tool_context):
144
- """ Process the orchestration request by executing multiple tool context blocks.
145
- This executes the tool context blocks against a live JSON:API server.
146
- It handles both GET and POST requests, and it can
147
- orchestrate multiple requests based on the provided tool context.
148
-
149
- Note the orchestration is processed by the client executor (here), not the server executor.
150
-
151
- Research:
152
-
153
- 1. How is this a "USB", since the request was specific about JSON:API?
154
- 2. How is it clear to loop through the tool_context[0] and call tool_context[1]?
155
- """
156
- global server_url
157
-
158
- def get_query_param_filter(query_params):
159
- """ return json:api filter
160
-
161
- eg
162
- curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"eq","val":null},{"name":"CreatedOn","op":"lt","val":"2023-07-14"}]'
163
-
164
- curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"gt","val":"2023-07-14"}]'
165
- curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"eq","val":null}]'
166
- curl -qg 'http://localhost:5656/api/Customer?filter=[{"name":"credit_limit","op":"gt","val":"1000"}]'
167
-
168
- query_params might be simple:
169
- "query_params": [ {"name": "credit_limit", "op": "gt", "val": "1000"} ]
170
- ==> ?filter=[{"name":"credit_limit","op":"gt","val":"1000"}]
171
-
172
- or a list:
173
- "query_params": [
174
- {
175
- "name": "date_shipped",
176
- "op": "eq",
177
- "val": None
178
- },
179
- {
180
- "name": "date_created",
181
- "op": "lt",
182
- "val": "2023-07-14"
183
- }
184
- ],
185
-
186
- """
187
-
188
- added_rows = 0
189
-
190
- query_param_filter = ''
191
- assert isinstance(query_params, list), "Query Params filter expected to be a list"
192
- query_param_filter = 'filter=' + str(query_params)
193
- # use urlencode to convert to JSON:API format...
194
- # val urllib.parse.quote() or urllib.parse.urlencode()
195
- # tool instructions... filtering, email etc "null"
196
- query_param_filter = query_param_filter.replace("'", '"') # convert single quotes to double quotes
197
- query_param_filter = query_param_filter.replace("None", 'null')
198
- query_param_filter = query_param_filter.replace('"null"', 'null')
199
- # query_param_filter = query_param_filter.replace("date_created", 'CreatedOn') # TODO - why this name?
200
- return query_param_filter # end get_query_param_filter
201
-
202
- def move_fields(src: dict, dest: dict, context_data: dict):
203
- """ Move fields from src to dest, replacing any variables with their values from context_data."""
204
- for variable_name, value in src.items():
205
- move_value = value
206
- if move_value.startswith("{") and move_value.endswith("}"):
207
- # strip the braces, and get the name after the first dot, # eg: "{Order.customer_id}" ==> "customer_id"``
208
- move_name = move_value[1:-1] # strip the braces
209
- if '.' in move_value:
210
- move_name = move_name.split('.', 1)[1]
211
- move_value = context_data['attributes'][move_name]
212
- dest[variable_name] = move_value
213
- return dest
214
-
215
- def print_get_response(query_param_filter, mcp_response):
216
- """ Print the response from the GET request. """
217
- print("\n3. MCP Server (als) GET filter(query_param_filter):\n", query_param_filter)
218
- print(" GET Response:\n", mcp_response.text)
219
- results : List[Dict] = mcp_response.json()['data']
220
- # print results in a table format
221
- if results:
222
- # Get all unique keys from all result dicts
223
- keys = set()
224
- for row in results:
225
- if isinstance(row, dict):
226
- keys.update(row.keys())
227
- keys = list(keys)
228
- # Print header
229
- print("\n| " + " | ".join(keys) + " |")
230
- print("|" + "|".join(["---"] * len(keys)) + "|")
231
- # Print rows
232
- for row in results:
233
- print("| " + " | ".join(str(row.get(k, "")) for k in keys) + " |")
234
- else:
235
- print("No results found.")
236
-
237
- assert isinstance(tool_context, (dict, list)), "Tool context expected to be a dictionary"
238
- context_data = {}
239
- added_rows = 0
240
-
241
- for each_block in tool_context["resources"]:
242
- if process_tool_context := True:
243
- if each_block["method"] == "GET":
244
- query_param_filter = get_query_param_filter(each_block["query_params"])
245
- headers = {"Content-Type": "application/vnd.api+json"}
246
- if "headers" in each_block:
247
- headers.update(each_block["headers"])
248
- mcp_response = requests.get(
249
- url = each_block["base_url"] + each_block["path"],
250
- headers=headers,
251
- params=query_param_filter
252
- )
253
- context_data = mcp_response.json()['data'] # result rows...
254
- print_get_response(query_param_filter, mcp_response)
255
- elif each_block["method"] in ["POST"]:
256
- for each_order in context_data:
257
- url = each_block["base_url"] + each_block["path"]
258
- json_update_data = { 'data': {"type": each_block["path"][1:], 'attributes': {} } }
259
- json_update_data_attributes = json_update_data["data"]["attributes"]
260
- move_fields( src= each_block["body"], dest=json_update_data_attributes, context_data=each_order)
261
- # eg: POST http://localhost:5656/api/SysEmail {'data': {'type': 'SysEmail', '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.'}}}}
262
- headers = {"Content-Type": "application/vnd.api+json"}
263
- if "headers" in each_block:
264
- headers.update(each_block["headers"])
265
- mcp_response = requests.post(
266
- url=url,
267
- headers=headers,
268
- json=json_update_data
269
- )
270
- added_rows += 1
271
- pass
272
- print("\n3. MCP Server (als) POST Response:\n", mcp_response.text)
273
- if added_rows > 0:
274
- print(f"...Added {added_rows} rows to the database; last row (only) shown above.")
275
- return mcp_response
276
-
14
+ import integration.mcp.mcp_client_executor as mcp_client_executor
277
15
 
278
16
 
279
17
  def declare_logic():
@@ -289,30 +27,21 @@ def declare_logic():
289
27
  """
290
28
 
291
29
 
292
- def mcp_client_executor(row: models.SysMcp, old_row: models.SysMcp, logic_row: LogicRow):
30
+ def mcp_client_executor_event(row: models.SysMcp, old_row: models.SysMcp, logic_row: LogicRow):
293
31
  """
294
32
 
295
33
  #als: create an MCP request. See https://apilogicserver.github.io/Docs/Integration-MCP/
296
34
 
297
35
  Test:
298
- * `curl -X 'POST' 'http://localhost:5656/api/SysMcp/' -H 'accept: application/vnd.api+json' -H 'Content-Type: application/json' -d '{ "data": { "attributes": {"request": "List the orders date_shipped is null and CreatedOn before 2023-07-14, and send a discount email (subject: '\''Discount Offer'\'') to the customer for each one."}, "type": "SysMcp"}}'`
299
- * Or, use the Admin App and insert a row into SysMCP (see `query_example`, below)
36
+ * curl -X 'POST' 'http://localhost:5656/api/SysMcp/' -H 'accept: application/vnd.api+json' -H 'Content-Type: application/json' -d '{ "data": { "attributes": {"request": "List the orders date_shipped is null and CreatedOn before 2023-07-14, and send a discount email (subject: '\''Discount Offer'\'') to the customer for each one."}, "type": "SysMcp"}}'
37
+ * Or, use the Admin App and insert a row into SysMCP, eg:
38
+ * List the orders date_shipped is null and CreatedOn before 2023-07-14, and send a discount email (subject: 'Discount Offer') to the customer for each one."
300
39
 
301
40
  Args:
302
- row (Mcp): inserted MCP with prompt
41
+ row (Mcp): inserted SysMcp with prompt
303
42
  old_row (Mcp): n/a
304
43
  logic_row (LogicRow): bundles curr/old row, with ins/upd/dlt logic
305
44
  """
306
- schema_text = discover_mcp_servers() # see: 1-discovery-from-als
307
-
308
- query_example = "List the orders date_shipped is null and CreatedOn before 2023-07-14, and send a discount email (subject: 'Discount Offer') to the customer for each one."
309
- query = row.request
310
- prompt = get_user_nl_query_and_training(query)
311
-
312
- tool_context = query_llm_with_nl(schema_text, prompt) # see: 2-tool-context-from-LLM
313
-
314
- mcp_response = process_tool_context(tool_context) # see: 3-MCP-server response
315
-
316
- print("\nTest complete.\n")
45
+ result = mcp_client_executor.mcp_client_executor(row.request)
317
46
 
318
- Rule.row_event(on_class=models.SysMcp, calling=mcp_client_executor) # see above
47
+ Rule.row_event(on_class=models.SysMcp, calling=mcp_client_executor_event) # see above
@@ -131,13 +131,13 @@ resources:
131
131
  user_key: id
132
132
  SysMcp:
133
133
  attributes:
134
+ - name: request
135
+ type: textarea
134
136
  - label: ' id*'
135
137
  name: id
136
138
  search: true
137
139
  sort: true
138
- - name: request
139
- - name: request_prompt
140
- - name: completion
140
+ show_when: isInserting == false
141
141
  type: SysMcp
142
142
  user_key: id
143
143
  settings:
@@ -0,0 +1,48 @@
1
+ const sla_doc =
2
+ '<div class="MuiTypography-root jss4" style="color: rgba(0, 0, 0, 0.66)">' +
3
+ '<div style="text-align:center">' +
4
+ '<h2>Welcome to API Logic Server</h2>' +
5
+ '</div><br>' +
6
+ '<h3><a class="custom" style="color: #3f51b5;" rel="nofollow" href="https://apilogicserver.github.io/Docs/" target="_blank">API Logic Server</a> ' +
7
+ 'creates <i>customizable</i> model-driven systems, instantly from your ' +
8
+ 'database:' +
9
+ '</h3>' +
10
+ '<h4>1. Automatic Admin App</h4>' +
11
+ '<ul>' +
12
+ ' <li>For instant collaboration and Back Office data maintenance</li>' +
13
+ ' <li>Rich functionality: multi-page, multi-table</li>' +
14
+ ' <li>Explore this Admin App, ' +
15
+ ' and how to <a class="custom" style="color: #3f51b5" rel="nofollow" href="https://apilogicserver.github.io/Docs/Admin-Customization/" target="_blank">customize it</a></li>' +
16
+ '</ul>' +
17
+ '<h4>2. API, with <a class="custom" style="color: #3f51b5;" rel="nofollow" href="/api" target="_blank">oas/Swagger</a></h4>' +
18
+ '<ul>' +
19
+ ' <li>For custom app dev, integration</li>' +
20
+ ' <li>Rich functionality: endpoint for each table, with filtering, pagination, related data</li>' +
21
+ ' <li><a class="custom" style="color: #3f51b5" rel="nofollow" href="https://apilogicserver.github.io/Docs/API-Customize/" target="_blank">Customizable</a>: add your own endpoints</li>' +
22
+ ' <li><a class="custom" style="color: #3f51b5" rel="nofollow" href="http://localhost:5656/stop" target="_blank">Stop</a> the server</li>' +
23
+ '</ul>' +
24
+ '<h4>3. Business Logic, for <span class="JoinedField" title="Often nearly half the app -- automation required"><span>backend processing</span> </span></h4>' +
25
+ '<ul>' +
26
+ ' <li>Spreadsheet-like rules for multi-table derivations and constraints</li>' +
27
+ ' <li>Extensible with Python events for email, messages, etc</li>' +
28
+ ' <li><a class="custom" style="color: #3f51b5" rel="nofollow" href="https://apilogicserver.github.io/Docs/Logic-Why/" target="_blank">Explore</a> ' +
29
+ ' how logic can meaningfully improve ' +
30
+ ' <a class="custom" style="color: #3f51b5" rel="nofollow" href="https://github.com/valhuber/LogicBank/wiki/by-code" title="Rules are 40X more concise than code, and address over 95% of database logic" target="_blank">conciseness</a> ' +
31
+ ' and quality</li>' +
32
+ '</ul>' +
33
+ '<h4>4. MCP-enabled, to <span class="JoinedField" title="Often nearly half the app -- automation required"><span>Enable Bus Users to use Natural Language to create multi-step execution flows</span> </span></h4>'+
34
+ '<ul>' +
35
+ ' <li>For more information, <a class="custom" style="color: #3f51b5" rel="nofollow" href="https://apilogicserver.github.io/Docs/Integration-MCP/" target="_blank">Click here</a></li>' +
36
+ ' <li>Create a new SysMcp, and enter: List the orders date_shipped is null and CreatedOn before 2023-07-14, and send a discount email (subject: \'Discount Offer\') to the customer for each one.</li>' +
37
+ '</ul>' +
38
+ '</div>'
39
+
40
+
41
+ function getContent(){
42
+
43
+ let result = '<button class="MuiButtonBase-root MuiButton-root MuiButton-text makeStyles-widget-159 MuiButton-textPrimary" tabindex="0" type="button" ><span class="MuiButton-label">Loaded External Component. </span></button>';
44
+ result = ""
45
+ result += sla_doc;
46
+ return result;
47
+ }
48
+
@@ -1,3 +1,15 @@
1
+ To issue one request per row from a prior step (fan-out), use the syntax:
2
+
3
+ "$<stepIndex>[*].<fieldName>"
4
+
5
+ For example, if step 0 returns orders, and you want to send a POST per customer:
6
+
7
+ Before (incorrect):
8
+ "customer_id": "{customer_id}"
9
+
10
+ After (correct):
11
+ "customer_id": "$0[*].customer_id"
12
+
1
13
  Only if 'email' is in the Natural language query, send email by issing a POST request to the SysEmail endpoint, setting the subject, message and customer_id in the body. DO NOT include a POST unless the word ‘email’ appears in the user query.
2
14
 
3
15
  Format response as mcp_responseFormat.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ApiLogicServer
3
- Version: 15.0.0
3
+ Version: 15.0.9
4
4
  Author-email: Val Huber <apilogicserver@gmail.com>
5
5
  License: BSD-3-Clause
6
6
  Project-URL: Homepage, https://www.genai-logic.com
@@ -1,19 +1,19 @@
1
1
  api_logic_server_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- api_logic_server_cli/api_logic_server.py,sha256=JGttj16Oh5RYnnl5vT6AFWZDa3JQJAAZWrzXW0jK0Lc,96093
3
- api_logic_server_cli/api_logic_server_info.yaml,sha256=gry1dTWvFjC4Uj6p2hm6zI9z1_MGnigzFXxFj-QFO40,167
2
+ api_logic_server_cli/api_logic_server.py,sha256=sPlwuJ-5alty2QKGWQzrQI-5TanLowp6LlzaCOf3mTs,96233
3
+ api_logic_server_cli/api_logic_server_info.yaml,sha256=7dgxLMqOLurpP0UFLsdB_Xm7EfOjSwmcjr8DJYc3osU,128
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
7
7
  api_logic_server_cli/extended_builder.py,sha256=EhtXGAt_RrDR2tCtgvc2U82we7fr-F6pP-e6HS6dQWQ,13867
8
8
  api_logic_server_cli/logging.yml,sha256=isWhKviFwJwYgjIUejfhUxcMli2zEbZeQbEvVhNk_4Y,1812
9
9
  api_logic_server_cli/manager.py,sha256=pLBJkGYhSFBifW97D162WWqA1UDoIwEXH7A6nBK4j1Y,11048
10
- api_logic_server_cli/add_cust/add_cust.py,sha256=aVadUVtKyNuWNbPjTcP1AEeavTQEVkZpOYyFBAGjjvw,13330
10
+ api_logic_server_cli/add_cust/add_cust.py,sha256=ZRmCr62ljocGuiMgplFhpLMFfLJrqsGo7KX0-zKZx-U,14046
11
11
  api_logic_server_cli/create_from_model/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
12
12
  api_logic_server_cli/create_from_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
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=G5ifhuR8OIujUHoklZ-XZyowCpUGKJrkLuyB9sSEf34,26728
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=Ef23JIB4IuPsef-QrJ2LTfiKBGRr2ddNSS6RWEh7sKs,11489
16
+ api_logic_server_cli/create_from_model/dbml.py,sha256=UKBIXUDGgm0yk0GefBB6Nu3FDwHf_daYV6qfPM0716U,11557
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=Qa-lL19TM5dAwMgVmT6ld7iB_Bb7RR0oYpEzlC2UmHM,27403
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=TK55yhQ53rEetYDm89ztvEIDPLnjMuYQ5_kJqaCio9I,12671
27
+ api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc,sha256=gJsMCXlkMupUzNYYqecR5sX9prwmZfo3TpzqssSKh3Y,12671
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
@@ -478,7 +478,7 @@ api_logic_server_cli/genai/genai.py,sha256=rt4XW_xmo-D5fLD8DQBHMjrU7Teflw43S8lR-
478
478
  api_logic_server_cli/genai/genai_fatal_excp.py,sha256=1FmDVcXVRqmG0JMVZ7l4KqMOdpff3KGZ2LPAGtw304Q,179
479
479
  api_logic_server_cli/genai/genai_graphics.py,sha256=RVLbcHoERS7F2l3WiwKrJkn3VnhQ07A-1ru55IvS4dU,20610
480
480
  api_logic_server_cli/genai/genai_logic_builder.py,sha256=u_89UtrALIfcMtW6p0SZ78lCmwRqerA5igyY2hDvjlk,26150
481
- api_logic_server_cli/genai/genai_svcs.py,sha256=yb-3a9Hizs8ZV9LGJTrHKQW_an3ESJrrNIRqyFszv2A,48449
481
+ api_logic_server_cli/genai/genai_svcs.py,sha256=6qHNj-17S2bkIm8F1nCFGzudLSViTP2WgP_XkAATQf0,48578
482
482
  api_logic_server_cli/genai/genai_utils.py,sha256=DTlWTnW5_2pzX4q1VG1tWqoZPVObDHR97SVe0z8Z3rs,17102
483
483
  api_logic_server_cli/genai/json2rules.py,sha256=ykoxxgZgqllzt8Ud06S-R_3QtumxXfmF5ksYC0Hh2Sk,2645
484
484
  api_logic_server_cli/model_migrator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -536,7 +536,7 @@ api_logic_server_cli/prototypes/base/api/expose_api_models.py,sha256=XhmZe_8Hnup
536
536
  api_logic_server_cli/prototypes/base/api/json_encoder.py,sha256=3EFDSi9jdaS4jSOs5EwyltWwTy-8QEoBN2afYknpCdQ,521
537
537
  api_logic_server_cli/prototypes/base/api/readme_customize_api.md,sha256=AEeBybDsXSDr2IlqGZCo17ZModZnrflAOCx2a6gP_rE,4165
538
538
  api_logic_server_cli/prototypes/base/api/api_discovery/auto_discovery.py,sha256=y6uQ_i9t8qqmjsM69rZzzp2q3OaAbSrwlfeRIrR_sRY,1099
539
- api_logic_server_cli/prototypes/base/api/api_discovery/mcp_discovery.py,sha256=fKNJ4dXhnnSVmkSVyvkP5T8NyGRZEOd_z6UdFcnDaWU,2078
539
+ api_logic_server_cli/prototypes/base/api/api_discovery/mcp_discovery.py,sha256=4hXYBCg_3XP2mJ_UJFnxyI7agN_TCUEuOSmf_w29vDw,4088
540
540
  api_logic_server_cli/prototypes/base/api/api_discovery/new_service.py,sha256=xe2AAFvpQwjrwwGAXs4pdZ8dWtcqAJ5KKYL_QKyqvGg,638
541
541
  api_logic_server_cli/prototypes/base/api/api_discovery/newer_service.py,sha256=p1ah8Pj2kjuTIlktYrtvdiuzGUEaPy7qLa7Cvu0GgbA,659
542
542
  api_logic_server_cli/prototypes/base/api/api_discovery/ontimize_api.py,sha256=_gNyxbx6ExbrCy3uzz8JzBBDZRxPyHoyRH7vJRqV1NM,20340
@@ -553,9 +553,9 @@ api_logic_server_cli/prototypes/base/config/activate_logicbank.py,sha256=IuDe3uW
553
553
  api_logic_server_cli/prototypes/base/config/config.py,sha256=SMkt_SmMFfQ1g9a9wG0bZNM7yUsRANxFCz2EFWs-WeY,30879
554
554
  api_logic_server_cli/prototypes/base/config/default.env,sha256=-rjXJrjR4vjMr9YCVYVchaJw7qMBlbvQ3KfR_wri_XM,412
555
555
  api_logic_server_cli/prototypes/base/config/logging-reduced.yml,sha256=N-BDIk0t5uAmw3Of_d_ueK4jx7pxNwlYbkiDd1wjRDs,2179
556
- api_logic_server_cli/prototypes/base/config/logging.yml,sha256=qMPyWipCWukb2qFyf18E9QCgGirob9jNDcx64PNqAdI,2330
556
+ api_logic_server_cli/prototypes/base/config/logging.yml,sha256=Rj7lwLAQ1fiP5al5KZxL8f5CXuICpGJDuJiLJbqcQTE,2426
557
557
  api_logic_server_cli/prototypes/base/config/mypy.ini,sha256=2jL3ZtXg9SmJZu6zVQS_hmvO8wyVF1a1JWcVZplXLEk,568
558
- api_logic_server_cli/prototypes/base/config/server_setup.py,sha256=rFwYNJe-QGpk7g_io2HjkpED0w1hSNkW8zWwG-ptFDA,15345
558
+ api_logic_server_cli/prototypes/base/config/server_setup.py,sha256=tku0B4O4du554_aVFBXpCgAaEDMaOEVO7cn0spwHpJc,18340
559
559
  api_logic_server_cli/prototypes/base/database/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
560
560
  api_logic_server_cli/prototypes/base/database/alembic.ini,sha256=N-xPrNv1gfMB8ylxm8pprtQxjwlv_9vTUSYGXnaWMnA,3027
561
561
  api_logic_server_cli/prototypes/base/database/authentication_db.sqlite,sha256=hA71uBnrh2PVQw9YLc-YbsXjpxr2VyvfE-OhF_ssE6w,45056
@@ -630,11 +630,13 @@ api_logic_server_cli/prototypes/base/integration/kafka/kafka_consumer.py,sha256=
630
630
  api_logic_server_cli/prototypes/base/integration/kafka/kafka_producer.py,sha256=g0nMAVfz1Y0iKJbbXfvRpdf-QUmyB4uUGZ6lyaVoXag,4470
631
631
  api_logic_server_cli/prototypes/base/integration/kafka/kafka_readme.md,sha256=MlwykHWM2w41KzWh4vPuTnIodR8f-BQzrWpV4P1hrsI,161
632
632
  api_logic_server_cli/prototypes/base/integration/mcp/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
633
- api_logic_server_cli/prototypes/base/integration/mcp/README_mcp.md,sha256=ZXLgtvqQCcGouxFE_7pu6OA3Qu1Qm3Jh-gcQxuFKb_w,1216
634
- api_logic_server_cli/prototypes/base/integration/mcp/mcp_client_executor.py,sha256=Y0kQy4oMuBhCfhZxlfm5qPVXVObjOULatpJ2lIc9qJQ,12926
635
- api_logic_server_cli/prototypes/base/integration/mcp/mcp_schema.txt,sha256=qmov7e0NdYiQTCxNJU2xzxf9HnYeXFej-c8GSB-y6MM,1143
633
+ api_logic_server_cli/prototypes/base/integration/mcp/mcp_client_executor.py,sha256=w3H6rVgveFg_ZgQNYSb-h1BcLnLF2W45owmWKOMovXg,6559
636
634
  api_logic_server_cli/prototypes/base/integration/mcp/mcp_server_discovery.json,sha256=TUyInb67AWoGw7XFE9iDZxmM8UEID-ahQmdmzpF9AmQ,188
637
- api_logic_server_cli/prototypes/base/integration/mcp/test_notes.txt,sha256=71Qqw7FRVGtEoHCxlGRPpaizvBh1L-X-MTOwkZ6CY3A,11126
635
+ api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_discovery_response.json,sha256=f1RP5kuTU8rkqxWsZoATBF8xdaVEgPTaB4MRoExIF-Q,3763
636
+ api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_request.prompt,sha256=vmt_fvwOK-C2fnI1LLUMe5WbLk6qxv2RdVJkBUTo9zM,2601
637
+ api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_schema.txt,sha256=qmov7e0NdYiQTCxNJU2xzxf9HnYeXFej-c8GSB-y6MM,1143
638
+ api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_tool_context_response.json,sha256=N1bzqc5JMQ7j12ThVuJ-6D8w9ZSmo5c3P0eThd-Q2Mo,1012
639
+ api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_tool_context_response_get.json,sha256=SDh8CkbL_fRGS7dDwcTofMlPziIu8Ycdests-jAeG6w,419
638
640
  api_logic_server_cli/prototypes/base/integration/n8n/N8N_WebHook_from_ApiLogicServer.json,sha256=s9JuoF9gLiuNZAD0dTVdnwQpORQHe0TseyPNVDe048w,10606
639
641
  api_logic_server_cli/prototypes/base/integration/n8n/n8n_producer.py,sha256=LuMec7HNwjaCsyMQSTTRpx9tW6l3OiV1StWrnahJBPA,7314
640
642
  api_logic_server_cli/prototypes/base/integration/n8n/n8n_readme.md,sha256=8RisYrm8ORUbtu-Duis19DJTBMGW32LymWYZN9A0pF0,3130
@@ -699,27 +701,19 @@ api_logic_server_cli/prototypes/base/venv_setup/venv.ps1,sha256=_-LfKkLw5HOkZsF5
699
701
  api_logic_server_cli/prototypes/base/venv_setup/venv.sh,sha256=aWX9fa8fe6aO9ifBIZEgGY5UGh4I0arOoCwBzDsxgU8,893
700
702
  api_logic_server_cli/prototypes/basic_demo/README.md,sha256=QHVOtJq7A_9RtTwrrecbbYbdBf3buxkhBgPpX342wAA,18685
701
703
  api_logic_server_cli/prototypes/basic_demo/customizations/api/.DS_Store,sha256=6F7pphfwiMhILhl_J6yVhDZFYXmar5V92iLCzSkfnyA,6148
702
- api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/mcp_discovery.py,sha256=YBgu5EOzrNhhdIPLUN4mplAy5WCy_KodK7LCMZlz6xk,3748
703
704
  api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/openapi.py,sha256=kLQ7Fn1J7tzuNJHBXF2AiwtzvQ-0JxJ6z-MfFryAtLk,3887
704
705
  api_logic_server_cli/prototypes/basic_demo/customizations/config/default.env,sha256=-rjXJrjR4vjMr9YCVYVchaJw7qMBlbvQ3KfR_wri_XM,412
705
- api_logic_server_cli/prototypes/basic_demo/customizations/config/server_setup.py,sha256=bV48ou0jSEm2o5yhTVgms1w7rqU9Ccf_2yfZip3ivJk,15441
706
706
  api_logic_server_cli/prototypes/basic_demo/customizations/database/db.sqlite,sha256=wfrMPS1h9bq5hT0u901p2FjlGIFZsKZkTy77tzrkzsM,28672
707
707
  api_logic_server_cli/prototypes/basic_demo/customizations/database/models.py,sha256=sg-ihsH386778vf2DtW0edzf8oCqDVp1NCqhyWXAbLw,4895
708
708
  api_logic_server_cli/prototypes/basic_demo/customizations/database/system/SAFRSBaseX.py,sha256=VeiUgXr9pkgvxchCf89lhRKNBlfj4_FYwAweu3NWj-M,5394
709
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
710
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/README_mcp.md,sha256=ZXLgtvqQCcGouxFE_7pu6OA3Qu1Qm3Jh-gcQxuFKb_w,1216
711
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/Zmcp_client_executor.py,sha256=wLjr6RDFpweCMCItno5OGUgNaMDYkYIBtwc7sUqNAG4,12945
712
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_schema.txt,sha256=qmov7e0NdYiQTCxNJU2xzxf9HnYeXFej-c8GSB-y6MM,1143
713
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_server_discovery.json,sha256=TUyInb67AWoGw7XFE9iDZxmM8UEID-ahQmdmzpF9AmQ,188
714
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_tool_context.json,sha256=UB25uyOO5Jnx5k5Sxe7c8MQxc6V0R1FsA4HhpHoKgw4,846
715
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/test_notes.txt,sha256=71Qqw7FRVGtEoHCxlGRPpaizvBh1L-X-MTOwkZ6CY3A,11126
716
709
  api_logic_server_cli/prototypes/basic_demo/customizations/logic/cocktail-napkin.jpg,sha256=5rNSy6wvcWSHPJQZqkf2DHs19QLWiyqMBNwxGqjstZU,133075
717
710
  api_logic_server_cli/prototypes/basic_demo/customizations/logic/declare_logic.py,sha256=Yk-X017gZM1egx4MXSx_FGURj4KDqJfpq1NWVFrwfEY,4612
718
711
  api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/email_request.py,sha256=3UnBUBpHSThHHRLLJuV-sgRAs6sS-UCzsTjBzf0onns,1851
719
- api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/mcp_client_executor_request.py,sha256=4v1HOZQRPZCMUeb5_QmMfqMvDr-pmcPfgalWsS1KSQg,14243
712
+ api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/mcp_client_executor_request.py,sha256=TkruzfnJ53HclWcPTx69du-XsRRAk6O67RsQkCJgUu4,2062
720
713
  api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/simple_constraints.py,sha256=4HRLOXuLJP1eOosONeEtpA9DehxiZME0-FBKuG1RaI0,760
721
714
  api_logic_server_cli/prototypes/basic_demo/customizations/security/declare_security.py,sha256=gbdH29cPY656lgROPm_w20Q-g6AhlIMES3wiIrqBTdk,2439
722
- api_logic_server_cli/prototypes/basic_demo/customizations/ui/admin/admin.yaml,sha256=y3goVMcxMN4wNLQh4kNJvYuSzpntECeDjwLQF2c1YI4,3494
715
+ api_logic_server_cli/prototypes/basic_demo/customizations/ui/admin/admin.yaml,sha256=PynSqW6qUh5JcRJKkgX-aSv8GjmCXxBflBTzRVTa0R0,3503
716
+ api_logic_server_cli/prototypes/basic_demo/customizations/ui/admin/home.js,sha256=0YSOlZAyhYOm7eKSVRMspzEc_P7PO-lRaUurYGCqQ10,3371
723
717
  api_logic_server_cli/prototypes/basic_demo/iteration/api/api_discovery/order_b2b.py,sha256=hg9Bsz0_t-RjO9rFcW-YH3y26kq4IY5dd9FfVoYxB4w,3176
724
718
  api_logic_server_cli/prototypes/basic_demo/iteration/database/db.sqlite,sha256=QsU34YuKT_YjPF-v6vDtcNJWV6AV2mspqAqW1VoMH5M,28672
725
719
  api_logic_server_cli/prototypes/basic_demo/iteration/docs/er_diagram.png,sha256=-3aSv9ay7XeFqGU-cygRz5T5eYhY627BYmA6GXdUYH0,161072
@@ -5651,7 +5645,7 @@ api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/html_tem
5651
5645
  api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/index.html,sha256=rTl5u1AtZRIBSxK4aANBRaJK3GZOML6eiVp6Tf_2LkI,567
5652
5646
  api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/sales_by_region.jinja,sha256=k93hwOF2KslZEWw31wIobVPdbigsjNUkRWsjec2DdbM,1848
5653
5647
  api_logic_server_cli/prototypes/manager/system/genai/learning_requests/logic_bank_api.prompt,sha256=1rBJy-rUHPx9YepSZH9niQocGbxtpbGyX2QmDxVsFd0,14489
5654
- api_logic_server_cli/prototypes/manager/system/genai/mcp_learning/mcp.prompt,sha256=D3JiMRqmTDEznDJcEIujd_vOkqy_txRUAgqgfg2tnIs,986
5648
+ api_logic_server_cli/prototypes/manager/system/genai/mcp_learning/mcp.prompt,sha256=XWE8K5KcWLgsHa1tdyFv-klbWk7wnzI_TcUZ67jMB84,1291
5655
5649
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/fixup.prompt,sha256=ZdVl-0J9oi8dS_3pDTrwdtvMSpDymbArTIlSEwcjCrM,305
5656
5650
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/graphics.prompt,sha256=FisvgcF8h2bdOL9iYQHOCT5NmW9RipnHzI6mzin3g8o,1265
5657
5651
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/graphics_request.prompt,sha256=T8lILtS_BtOjkalJPpiziVqlHVVc2PV6nz6qikNO808,175
@@ -6095,9 +6089,9 @@ api_logic_server_cli/tools/mini_skel/database/system/SAFRSBaseX.py,sha256=p8C7AF
6095
6089
  api_logic_server_cli/tools/mini_skel/database/system/TestDataBase.py,sha256=U02SYqThsbY5g3DX7XGaiMxjZBuOpzvtPS6RfI1WQFg,371
6096
6090
  api_logic_server_cli/tools/mini_skel/logic/declare_logic.py,sha256=fTrlHyqMeZsw_TyEXFa1VlYBL7fzjZab5ONSXO7aApo,175
6097
6091
  api_logic_server_cli/tools/mini_skel/logic/load_verify_rules.py,sha256=Rr5bySJpYCZmNPF2h-phcPJ53nAOPcT_ohZpCD93-a0,7530
6098
- apilogicserver-15.0.0.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
6099
- apilogicserver-15.0.0.dist-info/METADATA,sha256=bWhoBYs468qQj04sZak-1god1nik6X2Gvbo5RJAN2uI,6548
6100
- apilogicserver-15.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
6101
- apilogicserver-15.0.0.dist-info/entry_points.txt,sha256=KiLloZJ3c_RW-nIDqBtoE0WEsQTnZ3dELwHLWi23LMA,103
6102
- apilogicserver-15.0.0.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
6103
- apilogicserver-15.0.0.dist-info/RECORD,,
6092
+ apilogicserver-15.0.9.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
6093
+ apilogicserver-15.0.9.dist-info/METADATA,sha256=sDuEWjnABJFeKoHsc_hdv0S_uef_IzdmtONeUzy27mc,6548
6094
+ apilogicserver-15.0.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
6095
+ apilogicserver-15.0.9.dist-info/entry_points.txt,sha256=KiLloZJ3c_RW-nIDqBtoE0WEsQTnZ3dELwHLWi23LMA,103
6096
+ apilogicserver-15.0.9.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
6097
+ apilogicserver-15.0.9.dist-info/RECORD,,
@@ -1,15 +0,0 @@
1
- Model Context Protocol is a way for:
2
-
3
- 1. **Bus User ad hoc flows** using existing published mcp services (vs. hard-coding in IT as an endpoint; flows can be cached for repeated use)
4
-
5
- * ***Natural Language access*** to corporate databases for improved user interfaces
6
-
7
- * LLMs ***choreograph*** multiple MCP calls (to 1 or more MCP servers) in a chain of calls - an agentic workflow. MCPs support shared contexts and goals, enabling the LLM to use the result from 1 call to determine whether the goals has been reached, or which service is appropriate to call next
8
-
9
- 3. Chat agents to ***discover*** and ***call*** external servers, be they databases, APIs, file systems, etc. MCPs support shared contexts and goals, enabling the LLM
10
-
11
- * ***Corporate database participation*** in such flows, by making key functions available as MCP calls.
12
-
13
- This example is [explained here](https://apilogicserver.github.io/Docs/Integration-MCP/).
14
-
15
- > Note: this sample uses multi-term filters. These are usually OR'd together, but this example requires AND. This is provided by `database/system/SAFRSBaseX.py` (see `return query.filter(operator.and_(*expressions)`) in `_s_filter()`), activated in `config/server_setup.py`.