ApiLogicServer 14.5.3__py3-none-any.whl → 14.5.14__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 +4 -122
- api_logic_server_cli/api_logic_server_info.yaml +3 -3
- api_logic_server_cli/create_from_model/__pycache__/api_logic_server_utils.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/api_logic_server_utils.py +29 -10
- api_logic_server_cli/create_from_model/dbml.py +16 -9
- api_logic_server_cli/database/basic_demo.sqlite +0 -0
- api_logic_server_cli/genai/genai.py +4 -0
- api_logic_server_cli/genai/genai_svcs.py +10 -2
- api_logic_server_cli/manager.py +3 -1
- api_logic_server_cli/prototypes/base/.vscode/launch.json +40 -0
- api_logic_server_cli/prototypes/base/api/api_discovery/mcp_discovery.py +58 -0
- api_logic_server_cli/prototypes/base/database/system/SAFRSBaseX.py +68 -2
- api_logic_server_cli/prototypes/base/database/system/SAFRSBaseX.pyZ +73 -0
- api_logic_server_cli/prototypes/{basic_demo/customizations/integration → base/integration/mcp}/.DS_Store +0 -0
- api_logic_server_cli/prototypes/base/integration/mcp/README_mcp.md +15 -0
- api_logic_server_cli/prototypes/base/integration/mcp/mcp_client_executor.py +296 -0
- api_logic_server_cli/prototypes/base/integration/mcp/mcp_schema.txt +47 -0
- api_logic_server_cli/prototypes/base/integration/mcp/mcp_server_discovery.json +9 -0
- api_logic_server_cli/prototypes/base/integration/mcp/test_notes.txt +37 -0
- api_logic_server_cli/prototypes/basic_demo/README.md +251 -91
- api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/mcp_discovery.py +1 -44
- api_logic_server_cli/prototypes/basic_demo/customizations/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/basic_demo/customizations/database/models.py +27 -12
- api_logic_server_cli/prototypes/basic_demo/customizations/database/system/SAFRSBaseX.py +5 -2
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/Zmcp_client_executor.py +294 -0
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_tool_context.json +25 -0
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/test_notes.txt +37 -0
- api_logic_server_cli/prototypes/basic_demo/customizations/logic/declare_logic.py +1 -20
- api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/email_request.py +47 -0
- api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/mcp_client_executor_request.py +320 -0
- api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/simple_constraints.py +25 -0
- api_logic_server_cli/prototypes/basic_demo/customizations/ui/admin/admin.yaml +39 -32
- api_logic_server_cli/prototypes/basic_demo/iteration/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/basic_demo/iteration/ui/admin/admin.yaml +39 -44
- api_logic_server_cli/prototypes/manager/.vscode/launch.json +21 -0
- api_logic_server_cli/prototypes/manager/{README.md → READMEz.md} +4 -4
- api_logic_server_cli/prototypes/manager/REAMDE.md +1057 -0
- api_logic_server_cli/prototypes/manager/system/genai/mcp_learning/mcp.prompt +27 -0
- api_logic_server_cli/prototypes/manager/system/install-ApiLogicServer-dev/install-ApiLogicServer-dev.sh +2 -1
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.14.dist-info}/METADATA +1 -1
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.14.dist-info}/RECORD +46 -42
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.14.dist-info}/WHEEL +1 -1
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_client_executor.py +0 -350
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/3_executor_test_agent.py +0 -52
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/README_functon.md +0 -201
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/ai_plugin.json +0 -17
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/nw-swagger_3.json +0 -1731
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/snippets.txt +0 -5
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3 genai_demo_with_get.json +0 -1731
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3.json +0 -1782
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3_genai_demo.json +0 -264
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3_genai_demo_with_update.json +0 -1782
- api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/auto_discovery.py +0 -52
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.14.dist-info}/entry_points.txt +0 -0
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.14.dist-info}/licenses/LICENSE +0 -0
- {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.14.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
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
|
+
|
|
3
|
+
Format response as mcp_responseFormat.
|
|
4
|
+
|
|
5
|
+
<mcp_responseFormat>
|
|
6
|
+
class QueryParam(BaseModel):
|
|
7
|
+
name: str # attribute name
|
|
8
|
+
op: str # eq, lt, gt
|
|
9
|
+
val: str
|
|
10
|
+
|
|
11
|
+
class JsonValues(BaseMopdel):
|
|
12
|
+
name: str # name of attribute
|
|
13
|
+
value: str # value of attribute
|
|
14
|
+
|
|
15
|
+
class Resource(BaseModel):
|
|
16
|
+
tool_type: str
|
|
17
|
+
base_url: str
|
|
18
|
+
path: str # specified use case or requirement name (use 'General' if missing)
|
|
19
|
+
method: str # GET, PATCH, POST or DELETE
|
|
20
|
+
body: json # data for PATCH or POST
|
|
21
|
+
query_params: List(QueryParam) # filter for GET
|
|
22
|
+
|
|
23
|
+
class MCPResult(BaseModel): # must match system/genai/prompt_inserts/response_format.prompt
|
|
24
|
+
schema_version: str
|
|
25
|
+
resources : List[Resource] # list resources
|
|
26
|
+
|
|
27
|
+
<mcp_responseFormat/>
|
|
@@ -34,9 +34,10 @@ if [ $# -eq 0 ]
|
|
|
34
34
|
then
|
|
35
35
|
echo " "
|
|
36
36
|
# echo "shell: $SHELL"
|
|
37
|
-
echo "Installs
|
|
37
|
+
echo "Installs ApiLogicServer Dev Src and safrs-react-admin on $ostype (version 7.0.15)\n"
|
|
38
38
|
echo " .. vscode option creates venv, and starts vscode on workspace"
|
|
39
39
|
echo " .. See: https://apilogicserver.github.io/Docs/Architecture-Internals"
|
|
40
|
+
echo " .. Installer Version 14.05.04"
|
|
40
41
|
echo " "
|
|
41
42
|
echo " > sh system/install-ApiLogicServer-dev/install-ApiLogicServer-dev.sh [ vscode | charm | x ]"
|
|
42
43
|
echo " "
|
|
@@ -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=
|
|
3
|
-
api_logic_server_cli/api_logic_server_info.yaml,sha256=
|
|
2
|
+
api_logic_server_cli/api_logic_server.py,sha256=b29HhyCvnbSFiDB6Goep4RV9WB5BUuO4M6N-0CPQjFs,96180
|
|
3
|
+
api_logic_server_cli/api_logic_server_info.yaml,sha256=fc8tW0mwphoVmben9kMc1cAI3Yp_J1CdY8ZVcp9ulYg,124
|
|
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
|
-
api_logic_server_cli/manager.py,sha256=
|
|
9
|
+
api_logic_server_cli/manager.py,sha256=pLBJkGYhSFBifW97D162WWqA1UDoIwEXH7A6nBK4j1Y,11048
|
|
10
10
|
api_logic_server_cli/add_cust/add_cust.py,sha256=aVadUVtKyNuWNbPjTcP1AEeavTQEVkZpOYyFBAGjjvw,13330
|
|
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
|
-
api_logic_server_cli/create_from_model/api_logic_server_utils.py,sha256=
|
|
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=
|
|
16
|
+
api_logic_server_cli/create_from_model/dbml.py,sha256=uBbchGY5uCeB59bPwkMOCkBcmx1znt0WKKltFVWS2sc,11519
|
|
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
|
|
@@ -22,9 +22,9 @@ api_logic_server_cli/create_from_model/ui_admin_creator.py,sha256=j1hZuHn70c4NA7
|
|
|
22
22
|
api_logic_server_cli/create_from_model/uri_info.py,sha256=WiDw7hRcidz9hasodQ6O2ZJnUMfhHeydueQ8HXzPXlc,2395
|
|
23
23
|
api_logic_server_cli/create_from_model/__pycache__/__init__.cpython-312.pyc,sha256=CsCx6kjrSUonIcVUGVJemwAdGUB8h4IF0cwnpTIU4C4,223
|
|
24
24
|
api_logic_server_cli/create_from_model/__pycache__/api_expose_api_models_creator.cpython-312.pyc,sha256=3wtCiVHOjOgIonZOgnCsF2p01zcXIapx1_Tq2LwzY6Q,6989
|
|
25
|
-
api_logic_server_cli/create_from_model/__pycache__/api_logic_server_utils.cpython-312.pyc,sha256=
|
|
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=
|
|
27
|
+
api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc,sha256=a0T97WPNlfceDcpi7VQfXlIPCgn36aXxmtnMJ-cVSfQ,12537
|
|
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
|
|
@@ -443,7 +443,7 @@ api_logic_server_cli/database/allocation.sqlite,sha256=9bH3HKgagCnzNTrj7whysop7r
|
|
|
443
443
|
api_logic_server_cli/database/authentication-unused.sqlite,sha256=hA71uBnrh2PVQw9YLc-YbsXjpxr2VyvfE-OhF_ssE6w,45056
|
|
444
444
|
api_logic_server_cli/database/authentication_doc-unused.sqlite,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
445
445
|
api_logic_server_cli/database/authentication_doc_unused.sqlite,sha256=U1PFfI_P2fQ0O68AkYD5orgfbDIxJnh-jn8i2hUcLrg,53248
|
|
446
|
-
api_logic_server_cli/database/basic_demo.sqlite,sha256=
|
|
446
|
+
api_logic_server_cli/database/basic_demo.sqlite,sha256=uFJP2zUI8npJ1bJAeb3PSrGq3h_imBfsP_dZC3lGzDY,20480
|
|
447
447
|
api_logic_server_cli/database/basic_demo.txt,sha256=5si_qDHcyaOasTFgPqK-f4q0VRY3GA2Z-2OUaZ_Xgzg,50
|
|
448
448
|
api_logic_server_cli/database/basic_demo_wg.sqlite,sha256=ywpzn3Q5k-XTcMkB4-6Pks9XUB2Y4c_KUbAxwC5EFMU,28672
|
|
449
449
|
api_logic_server_cli/database/classicmodels.sqlite,sha256=9ob7iBwVLf8D10_d0SlAEHTGeig3fErP8Y6_s47LilY,413696
|
|
@@ -474,11 +474,11 @@ api_logic_server_cli/fragments/nw_virtual_attrs.py,sha256=7hgvhnO1UcJ6OoPKCxR5bn
|
|
|
474
474
|
api_logic_server_cli/fragments/ui_basic_web_app_runZZ.py,sha256=UllBIkKHlUE3nyDE1qtFWCA-NTE1ltYxPvVUd7lZI5U,870
|
|
475
475
|
api_logic_server_cli/genai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
476
476
|
api_logic_server_cli/genai/client.py,sha256=36gyz-dqxj4dJj1SGtO9NZsy9-cfnf4d7uahHimwqHk,772
|
|
477
|
-
api_logic_server_cli/genai/genai.py,sha256=
|
|
477
|
+
api_logic_server_cli/genai/genai.py,sha256=rt4XW_xmo-D5fLD8DQBHMjrU7Teflw43S8lR-tJd4KU,47014
|
|
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=
|
|
481
|
+
api_logic_server_cli/genai/genai_svcs.py,sha256=foOViYhzHn-8YNSDUiTUXcAU8DrutXpZ9UdotcOlIrg,48257
|
|
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
|
|
@@ -528,7 +528,7 @@ api_logic_server_cli/prototypes/base/.idea/runConfigurations/Run_Behave.xml,sha2
|
|
|
528
528
|
api_logic_server_cli/prototypes/base/.idea/runConfigurations/Windows_Run_Behave.xml,sha256=TMkGY8PMDhcGGkDw_tC-QljbmXLGT66ubsmRbMmfzi0,1205
|
|
529
529
|
api_logic_server_cli/prototypes/base/.idea/runConfigurations/run___No_Security.xml,sha256=BBK0h04vSC_hVSi7dKm_8Mo201jGivZRbx4ruFcqAEo,1193
|
|
530
530
|
api_logic_server_cli/prototypes/base/.idea/runConfigurations/run_docker.xml,sha256=oDHdZ8WEGU1MoWEQHH3jBvbPZt4hGlodUq4IeXv68co,2444
|
|
531
|
-
api_logic_server_cli/prototypes/base/.vscode/launch.json,sha256=
|
|
531
|
+
api_logic_server_cli/prototypes/base/.vscode/launch.json,sha256=_QjN3aCBJwk2SIqA7v6w4pI96oTxYVzs0f45oEgoucU,12628
|
|
532
532
|
api_logic_server_cli/prototypes/base/.vscode/settings.json,sha256=vS3gt0PpFbZ3fdGeiVGaE4v9PyRydjrrdGWb27w9UUo,470
|
|
533
533
|
api_logic_server_cli/prototypes/base/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
534
534
|
api_logic_server_cli/prototypes/base/api/customize_api.py,sha256=-_eoaIukB4v1dF1TXTOqRRyU_nLbXXEhphI43GPtdoI,2236
|
|
@@ -536,6 +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
540
|
api_logic_server_cli/prototypes/base/api/api_discovery/new_service.py,sha256=xe2AAFvpQwjrwwGAXs4pdZ8dWtcqAJ5KKYL_QKyqvGg,638
|
|
540
541
|
api_logic_server_cli/prototypes/base/api/api_discovery/newer_service.py,sha256=p1ah8Pj2kjuTIlktYrtvdiuzGUEaPy7qLa7Cvu0GgbA,659
|
|
541
542
|
api_logic_server_cli/prototypes/base/api/api_discovery/ontimize_api.py,sha256=_gNyxbx6ExbrCy3uzz8JzBBDZRxPyHoyRH7vJRqV1NM,20340
|
|
@@ -567,7 +568,8 @@ api_logic_server_cli/prototypes/base/database/alembic/versions/readme.md,sha256=
|
|
|
567
568
|
api_logic_server_cli/prototypes/base/database/database_discovery/authentication_models.py,sha256=8IGpWyNzr3BavktFP85gtsWcorTznR2DFeQb-9yCLZ4,6772
|
|
568
569
|
api_logic_server_cli/prototypes/base/database/database_discovery/auto_discovery.py,sha256=m-LFznTdM581n7xkisamzHIQZ3fEiY9RPKd4wzB6wYo,978
|
|
569
570
|
api_logic_server_cli/prototypes/base/database/db_debug/db_debug.py,sha256=ctcwksnM89597LUAme5Sn044r-xgRh47wSSe3MioPH4,3259
|
|
570
|
-
api_logic_server_cli/prototypes/base/database/system/SAFRSBaseX.py,sha256=
|
|
571
|
+
api_logic_server_cli/prototypes/base/database/system/SAFRSBaseX.py,sha256=VeiUgXr9pkgvxchCf89lhRKNBlfj4_FYwAweu3NWj-M,5394
|
|
572
|
+
api_logic_server_cli/prototypes/base/database/system/SAFRSBaseX.pyZ,sha256=p8C7AF9r9a_oeO1GcltUqR6YSTbcevbWVm3vhfTT1h0,2540
|
|
571
573
|
api_logic_server_cli/prototypes/base/database/test_data/alp_init.py,sha256=C7yqHB7KoOgwvzRsI3DVk9O_QHPu4SYioChv0Jz5xXY,1203
|
|
572
574
|
api_logic_server_cli/prototypes/base/database/test_data/readme.md,sha256=IDKVMagnjobf5IigYCkQkUMM_iLvBdhK9grMNImSOKg,694
|
|
573
575
|
api_logic_server_cli/prototypes/base/database/test_data/response2code.py,sha256=PTeAXHU-r6r0EBknSGXnbkdySAAzch_3gOuRlyUyVF8,4414
|
|
@@ -627,6 +629,12 @@ api_logic_server_cli/prototypes/base/docs/training/logic_example.py,sha256=yAot6
|
|
|
627
629
|
api_logic_server_cli/prototypes/base/integration/kafka/kafka_consumer.py,sha256=2DOsFpYnsJ71gZzzfJweEmL-i99uCtEFU0hVwIKFGMw,1516
|
|
628
630
|
api_logic_server_cli/prototypes/base/integration/kafka/kafka_producer.py,sha256=g0nMAVfz1Y0iKJbbXfvRpdf-QUmyB4uUGZ6lyaVoXag,4470
|
|
629
631
|
api_logic_server_cli/prototypes/base/integration/kafka/kafka_readme.md,sha256=MlwykHWM2w41KzWh4vPuTnIodR8f-BQzrWpV4P1hrsI,161
|
|
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
|
|
636
|
+
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
|
|
630
638
|
api_logic_server_cli/prototypes/base/integration/n8n/N8N_WebHook_from_ApiLogicServer.json,sha256=s9JuoF9gLiuNZAD0dTVdnwQpORQHe0TseyPNVDe048w,10606
|
|
631
639
|
api_logic_server_cli/prototypes/base/integration/n8n/n8n_producer.py,sha256=LuMec7HNwjaCsyMQSTTRpx9tW6l3OiV1StWrnahJBPA,7314
|
|
632
640
|
api_logic_server_cli/prototypes/base/integration/n8n/n8n_readme.md,sha256=8RisYrm8ORUbtu-Duis19DJTBMGW32LymWYZN9A0pF0,3130
|
|
@@ -689,41 +697,36 @@ api_logic_server_cli/prototypes/base/venv_setup/requirements-no-cli.txt,sha256=s
|
|
|
689
697
|
api_logic_server_cli/prototypes/base/venv_setup/venv-linux.sh,sha256=FDIxVyZ50CgLVLrAW942Kxnkv1n4WLR2UerzUnuhPwM,900
|
|
690
698
|
api_logic_server_cli/prototypes/base/venv_setup/venv.ps1,sha256=_-LfKkLw5HOkZsF59BGCqM9Zsk3n1oDIyDb4emy0O08,698
|
|
691
699
|
api_logic_server_cli/prototypes/base/venv_setup/venv.sh,sha256=aWX9fa8fe6aO9ifBIZEgGY5UGh4I0arOoCwBzDsxgU8,893
|
|
692
|
-
api_logic_server_cli/prototypes/basic_demo/README.md,sha256=
|
|
700
|
+
api_logic_server_cli/prototypes/basic_demo/README.md,sha256=QHVOtJq7A_9RtTwrrecbbYbdBf3buxkhBgPpX342wAA,18685
|
|
693
701
|
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=
|
|
702
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/mcp_discovery.py,sha256=YBgu5EOzrNhhdIPLUN4mplAy5WCy_KodK7LCMZlz6xk,3748
|
|
695
703
|
api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/openapi.py,sha256=kLQ7Fn1J7tzuNJHBXF2AiwtzvQ-0JxJ6z-MfFryAtLk,3887
|
|
696
704
|
api_logic_server_cli/prototypes/basic_demo/customizations/config/default.env,sha256=-rjXJrjR4vjMr9YCVYVchaJw7qMBlbvQ3KfR_wri_XM,412
|
|
697
705
|
api_logic_server_cli/prototypes/basic_demo/customizations/config/server_setup.py,sha256=bV48ou0jSEm2o5yhTVgms1w7rqU9Ccf_2yfZip3ivJk,15441
|
|
698
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/database/db.sqlite,sha256=
|
|
699
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/database/models.py,sha256=
|
|
700
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/database/system/SAFRSBaseX.py,sha256=
|
|
701
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/integration/.DS_Store,sha256=nfyHG63vXNerWIrSwk76tTujqqB25mRZZZ04VJmxlCQ,6148
|
|
706
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/database/db.sqlite,sha256=wfrMPS1h9bq5hT0u901p2FjlGIFZsKZkTy77tzrkzsM,28672
|
|
707
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/database/models.py,sha256=sg-ihsH386778vf2DtW0edzf8oCqDVp1NCqhyWXAbLw,4895
|
|
708
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/database/system/SAFRSBaseX.py,sha256=VeiUgXr9pkgvxchCf89lhRKNBlfj4_FYwAweu3NWj-M,5394
|
|
702
709
|
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
|
703
710
|
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/
|
|
711
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/Zmcp_client_executor.py,sha256=wLjr6RDFpweCMCItno5OGUgNaMDYkYIBtwc7sUqNAG4,12945
|
|
705
712
|
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_schema.txt,sha256=qmov7e0NdYiQTCxNJU2xzxf9HnYeXFej-c8GSB-y6MM,1143
|
|
706
713
|
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_server_discovery.json,sha256=TUyInb67AWoGw7XFE9iDZxmM8UEID-ahQmdmzpF9AmQ,188
|
|
707
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/integration/
|
|
708
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/integration/
|
|
709
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/ai_plugin.json,sha256=-TcpPnKT6OESE4U97Sah9tCjaqMOlWY5fnKtjGO7vYM,561
|
|
710
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/nw-swagger_3.json,sha256=nYMUuLic6x3YaymUXDCevM-XeZ5DjnlgNFm0uXYNHkU,51728
|
|
711
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/snippets.txt,sha256=mUHFRZlXLOO8VVeVmFeZTcdetzsiKFW2ueIGIM0EcXk,132
|
|
712
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3 genai_demo_with_get.json,sha256=qKiO5OwwMrFflYi-_m5Iuo6HgvV7Dt3oooRJ9bpMwIg,51695
|
|
713
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3.json,sha256=arGkv02-QYkGp20l3o88kijV4XOdMi2HsxraVWhGd54,49478
|
|
714
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3_genai_demo.json,sha256=EnHZqaqlcSiAeLXpX3c3L_PCQcWCPdD3eKiEwzDU-0g,6024
|
|
715
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3_genai_demo_with_update.json,sha256=arGkv02-QYkGp20l3o88kijV4XOdMi2HsxraVWhGd54,49478
|
|
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
716
|
api_logic_server_cli/prototypes/basic_demo/customizations/logic/cocktail-napkin.jpg,sha256=5rNSy6wvcWSHPJQZqkf2DHs19QLWiyqMBNwxGqjstZU,133075
|
|
717
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/logic/declare_logic.py,sha256=
|
|
717
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/logic/declare_logic.py,sha256=Yk-X017gZM1egx4MXSx_FGURj4KDqJfpq1NWVFrwfEY,4612
|
|
718
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/email_request.py,sha256=_ky4ZAggiH3-V1-_V4j7pBZ0gWju8cDCZP48d_Y-otw,1765
|
|
719
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/mcp_client_executor_request.py,sha256=vwdEZqsiOwxA-loFvjFetGi9zBnOnoPvrwm3PQhtAQA,14226
|
|
720
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/simple_constraints.py,sha256=4HRLOXuLJP1eOosONeEtpA9DehxiZME0-FBKuG1RaI0,760
|
|
718
721
|
api_logic_server_cli/prototypes/basic_demo/customizations/security/declare_security.py,sha256=gbdH29cPY656lgROPm_w20Q-g6AhlIMES3wiIrqBTdk,2439
|
|
719
|
-
api_logic_server_cli/prototypes/basic_demo/customizations/ui/admin/admin.yaml,sha256=
|
|
722
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/ui/admin/admin.yaml,sha256=y3goVMcxMN4wNLQh4kNJvYuSzpntECeDjwLQF2c1YI4,3494
|
|
720
723
|
api_logic_server_cli/prototypes/basic_demo/iteration/api/api_discovery/order_b2b.py,sha256=hg9Bsz0_t-RjO9rFcW-YH3y26kq4IY5dd9FfVoYxB4w,3176
|
|
721
|
-
api_logic_server_cli/prototypes/basic_demo/iteration/database/db.sqlite,sha256=
|
|
724
|
+
api_logic_server_cli/prototypes/basic_demo/iteration/database/db.sqlite,sha256=QsU34YuKT_YjPF-v6vDtcNJWV6AV2mspqAqW1VoMH5M,28672
|
|
722
725
|
api_logic_server_cli/prototypes/basic_demo/iteration/docs/er_diagram.png,sha256=-3aSv9ay7XeFqGU-cygRz5T5eYhY627BYmA6GXdUYH0,161072
|
|
723
726
|
api_logic_server_cli/prototypes/basic_demo/iteration/integration/row_dict_maps/OrderB2B.py,sha256=MGNSSOpqfHPaK8Yjm-h_x8ki-Uu_yU73C1l8ZXRipCo,1282
|
|
724
727
|
api_logic_server_cli/prototypes/basic_demo/iteration/integration/row_dict_maps/OrderShipping.py,sha256=pzrK57C1ppUUcSBVNICXGujsf9p1ZTRq0bpKacgcrV0,1213
|
|
725
728
|
api_logic_server_cli/prototypes/basic_demo/iteration/logic/declare_logic.py,sha256=Jnqt0j2Yu8ev1Pi9T3rogumuGn2sR4Q4QyWeUIunG28,6501
|
|
726
|
-
api_logic_server_cli/prototypes/basic_demo/iteration/ui/admin/admin.yaml,sha256=
|
|
729
|
+
api_logic_server_cli/prototypes/basic_demo/iteration/ui/admin/admin.yaml,sha256=EZmy6kiOENX8jzcqBcvdgteH04yylfJ9bgDQ7rYPfIw,3541
|
|
727
730
|
api_logic_server_cli/prototypes/classicmodels/devops/docker-compose-dev-azure/docker-compose-dev-azure.yml,sha256=5qrlCzViJcYZ9uhWGBCJmnexi7bwQaYzQKMqGCnRzS0,1389
|
|
728
731
|
api_logic_server_cli/prototypes/classicmodels/devops/docker-compose-dev-local/docker-compose-dev-local.yml,sha256=WJu3CKusT1wju6CubOKi6T1pW3pbE8JrZraGTpC6HTY,1439
|
|
729
732
|
api_logic_server_cli/prototypes/classicmodels/devops/docker-compose-dev-local-nginx/docker-compose-dev-local-nginx.yml,sha256=QgsdxPfRYNUco0DcXZWo5_9FgDzrCmnWFoDjkrws5XU,2456
|
|
@@ -756,16 +759,16 @@ api_logic_server_cli/prototypes/genai_demo/integration/row_dict_maps/row_dict_ma
|
|
|
756
759
|
api_logic_server_cli/prototypes/genai_demo/logic/declare_logic.py,sha256=gP4_Zr2nM8qXmmrCwtSM6D2ITZkLvwanBQhIo9UNiuo,4932
|
|
757
760
|
api_logic_server_cli/prototypes/genai_demo/logic/load_verify_rules.py,sha256=TWqzJ_KWX_QvpxWQv4ujqc487W1P9ZglrciSLor_NHA,7681
|
|
758
761
|
api_logic_server_cli/prototypes/genai_demo/logic/readme_declare_logic.md,sha256=CFC13f9Z4rTkNiRoJTBEz3A2F_yRThOj-HrHDsSdKsw,6630
|
|
759
|
-
api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/auto_discovery.py,sha256=m97W6DYi6ouTDuFCiU1rPq1UqzJuNnVePyOeLU33D1s,2645
|
|
760
762
|
api_logic_server_cli/prototypes/genai_demo/security/declare_security.py,sha256=L3AL1bgdqIWQxdkJZcFVDOQ0XRpmeLAKqwlAYChFWKo,2108
|
|
761
763
|
api_logic_server_cli/prototypes/genai_demo/ui/admin/admin.yaml,sha256=vMpr6to6g-h9gSuhxfpTeDMw5_R_eUKbV7qXzMEvIyk,3446
|
|
762
764
|
api_logic_server_cli/prototypes/manager/.gitignore,sha256=xfAjNQHokbo6GuN1ghx-eml8tQIzwUczLC_YVzElndI,195
|
|
763
|
-
api_logic_server_cli/prototypes/manager/
|
|
765
|
+
api_logic_server_cli/prototypes/manager/READMEz.md,sha256=zOnEDVApxPEivo0oZ316eWkr8y0me7wie1An3oJmn9c,23312
|
|
766
|
+
api_logic_server_cli/prototypes/manager/REAMDE.md,sha256=mxcXCV8lx7LcqJO6zL7IveRjDJRrR4VJjoXNW_BGA60,36074
|
|
764
767
|
api_logic_server_cli/prototypes/manager/run_sample.sh,sha256=eRA-p_Snr7Pwk14wUw5mja2usEcjAKisHVhHMeSaQ68,781
|
|
765
768
|
api_logic_server_cli/prototypes/manager/run_web_genai.sh,sha256=sgjB3vKhkao93Ny3VN0AQ-wonvdBcBIT3rTbyNTMoG8,136
|
|
766
769
|
api_logic_server_cli/prototypes/manager/settings.txt,sha256=_jjL30jomIMxG21edDfrXYRT9Zfgr_0EdUWvcEUOnFQ,368
|
|
767
770
|
api_logic_server_cli/prototypes/manager/.vscode/ApiLogicServer.code-workspace,sha256=g062GyCFJ9XfuzVAfxk8Qsl5kWAB_v5Z1AQ3dzpcHMw,294
|
|
768
|
-
api_logic_server_cli/prototypes/manager/.vscode/launch.json,sha256=
|
|
771
|
+
api_logic_server_cli/prototypes/manager/.vscode/launch.json,sha256=alh_fiuqMjY-uIk4ghfwyMs3y-U2dYr1W6rS9ncpNEY,33491
|
|
769
772
|
api_logic_server_cli/prototypes/manager/.vscode/settings.json,sha256=wQgpFvviPbZCmsf02UgrJSGAz7g3i4chDZ_AdSIOr5Y,625
|
|
770
773
|
api_logic_server_cli/prototypes/manager/system/Manager_workspace.code-workspace,sha256=g062GyCFJ9XfuzVAfxk8Qsl5kWAB_v5Z1AQ3dzpcHMw,294
|
|
771
774
|
api_logic_server_cli/prototypes/manager/system/style-guide.yaml,sha256=JaP3NDE29k4_e9ELeLTZfnWf2L8VgS1X7hO8J_BNqJU,673
|
|
@@ -5649,6 +5652,7 @@ api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/html_tem
|
|
|
5649
5652
|
api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/index.html,sha256=rTl5u1AtZRIBSxK4aANBRaJK3GZOML6eiVp6Tf_2LkI,567
|
|
5650
5653
|
api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/sales_by_region.jinja,sha256=k93hwOF2KslZEWw31wIobVPdbigsjNUkRWsjec2DdbM,1848
|
|
5651
5654
|
api_logic_server_cli/prototypes/manager/system/genai/learning_requests/logic_bank_api.prompt,sha256=1rBJy-rUHPx9YepSZH9niQocGbxtpbGyX2QmDxVsFd0,14489
|
|
5655
|
+
api_logic_server_cli/prototypes/manager/system/genai/mcp_learning/mcp.prompt,sha256=D3JiMRqmTDEznDJcEIujd_vOkqy_txRUAgqgfg2tnIs,986
|
|
5652
5656
|
api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/fixup.prompt,sha256=ZdVl-0J9oi8dS_3pDTrwdtvMSpDymbArTIlSEwcjCrM,305
|
|
5653
5657
|
api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/graphics.prompt,sha256=FisvgcF8h2bdOL9iYQHOCT5NmW9RipnHzI6mzin3g8o,1265
|
|
5654
5658
|
api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/graphics_request.prompt,sha256=T8lILtS_BtOjkalJPpiziVqlHVVc2PV6nz6qikNO808,175
|
|
@@ -5694,7 +5698,7 @@ api_logic_server_cli/prototypes/manager/system/images/copilot-clean.png,sha256=R
|
|
|
5694
5698
|
api_logic_server_cli/prototypes/manager/system/images/copilot.png,sha256=N8WsgqwOLD3DxkmQvpnLxx7KbMirXViUgNgumg-lbIA,1175570
|
|
5695
5699
|
api_logic_server_cli/prototypes/manager/system/images/genai.png,sha256=jqC_qRwR6Y3DIfWaYnLPWKn1KF1UUezEnMeRpvRwv5s,117507
|
|
5696
5700
|
api_logic_server_cli/prototypes/manager/system/install-ApiLogicServer-dev/install-ApiLogicServer-dev.ps1,sha256=ia2LGgeK49TBI-fgrvFvGVw7EyN9qFvEoNGDE9sLxjI,3210
|
|
5697
|
-
api_logic_server_cli/prototypes/manager/system/install-ApiLogicServer-dev/install-ApiLogicServer-dev.sh,sha256=
|
|
5701
|
+
api_logic_server_cli/prototypes/manager/system/install-ApiLogicServer-dev/install-ApiLogicServer-dev.sh,sha256=zutEcQNZ1DX9gaUSRbsAcIClsy_a7inHWcb2dpcYgWY,3677
|
|
5698
5702
|
api_logic_server_cli/prototypes/manager/system/install-ApiLogicServer-dev/readme.md,sha256=NSr2hEKT1XeFMzJ_x5vcbdEFZ4PJz_GobdjRg-TyLHU,206
|
|
5699
5703
|
api_logic_server_cli/prototypes/manager/webgenai/README.md,sha256=kC5hXmKYMMEfF1aQvZnAhWrL0KwwBvJnwVMptgOQUbE,362
|
|
5700
5704
|
api_logic_server_cli/prototypes/manager_docker/.devcontainer/For_VSCode.dockerfile,sha256=_RObRZ3EBDNj1_Sx26r_CysBboMvill83f8tQN1T0Do,438
|
|
@@ -6092,9 +6096,9 @@ api_logic_server_cli/tools/mini_skel/database/system/SAFRSBaseX.py,sha256=p8C7AF
|
|
|
6092
6096
|
api_logic_server_cli/tools/mini_skel/database/system/TestDataBase.py,sha256=U02SYqThsbY5g3DX7XGaiMxjZBuOpzvtPS6RfI1WQFg,371
|
|
6093
6097
|
api_logic_server_cli/tools/mini_skel/logic/declare_logic.py,sha256=fTrlHyqMeZsw_TyEXFa1VlYBL7fzjZab5ONSXO7aApo,175
|
|
6094
6098
|
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.
|
|
6099
|
+
apilogicserver-14.5.14.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
|
|
6100
|
+
apilogicserver-14.5.14.dist-info/METADATA,sha256=3jpFFnWukqLXFUMJEyThI4ri99MlKMfeLx4v8rzUmkk,6525
|
|
6101
|
+
apilogicserver-14.5.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
6102
|
+
apilogicserver-14.5.14.dist-info/entry_points.txt,sha256=KiLloZJ3c_RW-nIDqBtoE0WEsQTnZ3dELwHLWi23LMA,103
|
|
6103
|
+
apilogicserver-14.5.14.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
|
|
6104
|
+
apilogicserver-14.5.14.dist-info/RECORD,,
|
api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_client_executor.py
DELETED
|
@@ -1,350 +0,0 @@
|
|
|
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
|
-
|
|
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
|
-
"""
|
|
20
|
-
|
|
21
|
-
import json
|
|
22
|
-
import os
|
|
23
|
-
import re
|
|
24
|
-
import openai
|
|
25
|
-
import requests
|
|
26
|
-
|
|
27
|
-
# Set your OpenAI API key
|
|
28
|
-
openai.api_key = os.getenv("APILOGICSERVER_CHATGPT_APIKEY")
|
|
29
|
-
|
|
30
|
-
server_url = os.getenv("APILOGICSERVER_URL", "http://localhost:5656/api")
|
|
31
|
-
|
|
32
|
-
# debug settings
|
|
33
|
-
test_type = 'orchestration' # 'simple_get' or 'orchestration'
|
|
34
|
-
create_tool_context_from_llm = True
|
|
35
|
-
''' set to False to bypass LLM call and save 2-3 secs in testing '''
|
|
36
|
-
use_test_schema = False
|
|
37
|
-
''' True means bypass discovery, use hard-coded schedma file '''
|
|
38
|
-
|
|
39
|
-
def discover_mcp_servers():
|
|
40
|
-
""" Discover the MCP servers by calling the /api/.well-known/mcp.json endpoint.
|
|
41
|
-
This function retrieves the list of available MCP servers and their capabilities.
|
|
42
|
-
"""
|
|
43
|
-
global server_url, use_test_schema
|
|
44
|
-
|
|
45
|
-
# create schema_text (for prompt), by reading integration/mcp/mcp_schema.txt
|
|
46
|
-
if use_test_schema:
|
|
47
|
-
schema_file_path = os.path.join(os.path.dirname(__file__), "mcp_schema.txt")
|
|
48
|
-
try:
|
|
49
|
-
with open(schema_file_path, "r") as schema_file:
|
|
50
|
-
schema_text = schema_file.read()
|
|
51
|
-
except FileNotFoundError:
|
|
52
|
-
print(f"Schema file not found at {schema_file_path}.")
|
|
53
|
-
exit(1)
|
|
54
|
-
finally:
|
|
55
|
-
print(f"Schema file loaded from {schema_file_path}.")
|
|
56
|
-
return schema_text
|
|
57
|
-
|
|
58
|
-
# find the servers - read the mcp_server_discovery.json file
|
|
59
|
-
discovery_file_path = os.path.join(os.path.dirname(__file__), "mcp_server_discovery.json")
|
|
60
|
-
try:
|
|
61
|
-
with open(discovery_file_path, "r") as discovery_file:
|
|
62
|
-
discovery_data = json.load(discovery_file)
|
|
63
|
-
print(f"\nDiscovered MCP servers from config file: {discovery_file_path}:" + json.dumps(discovery_data, indent=4))
|
|
64
|
-
except FileNotFoundError:
|
|
65
|
-
print(f"Discovery file not found at {discovery_file_path}.")
|
|
66
|
-
except json.JSONDecodeError as e:
|
|
67
|
-
print(f"Error decoding JSON from {discovery_file_path}: {e}")
|
|
68
|
-
|
|
69
|
-
for each_server in discovery_data["servers"]:
|
|
70
|
-
discovery_url = each_server["schema_url"]
|
|
71
|
-
|
|
72
|
-
# Call the discovery_url to get the MCP/API schema
|
|
73
|
-
try:
|
|
74
|
-
response = requests.get(discovery_url)
|
|
75
|
-
if response.status_code == 200:
|
|
76
|
-
api_schema = response.json()
|
|
77
|
-
print()
|
|
78
|
-
print(f"\n1. API Schema from discovery schema_url: {discovery_url}:\n" +json.dumps(api_schema, indent=4))
|
|
79
|
-
else:
|
|
80
|
-
print(f"Failed to retrieve API schema from {discovery_url}: {response.status_code}")
|
|
81
|
-
except requests.RequestException as e:
|
|
82
|
-
print(f"Error calling OpenAPI URL: {e}")
|
|
83
|
-
return json.dumps(api_schema)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
def get_user_nl_query():
|
|
87
|
-
""" Get the natural language query from the user.
|
|
88
|
-
|
|
89
|
-
"""
|
|
90
|
-
|
|
91
|
-
global test_type
|
|
92
|
-
|
|
93
|
-
default_request = "List the orders created more than 30 days ago, and send a discount email to the customer for each one."
|
|
94
|
-
# eg, curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"gt","val":"2023-07-14"}]'
|
|
95
|
-
# eg, curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"eq","val":null}]'
|
|
96
|
-
# eg, curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"eq","val":null},{"name":"CreatedOn","op":"lt","val":"2023-07-14"}]'
|
|
97
|
-
# eg, curl -qg 'http://localhost:5656/api/Customer?filter=[{"name":"credit_limit","op":"gt","val":"1000"}]'
|
|
98
|
-
|
|
99
|
-
# curl -qg 'http://localhost:5656/api/Order?filter=[{"name":%20"date_shipped",%20"op":%20"eq",%20"val":%20null},%20{"name":%20"CreatedOn",%20"op":%20"lt",%20"val":%20"2023-07-14"}]'
|
|
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
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
def query_llm_with_nl(nl_query):
|
|
120
|
-
"""
|
|
121
|
-
Query the LLM with a natural language query and schema text to generate a tool context block.
|
|
122
|
-
|
|
123
|
-
It handles both orchestration and simple GET requests.
|
|
124
|
-
"""
|
|
125
|
-
|
|
126
|
-
global test_type, create_tool_context_from_llm
|
|
127
|
-
|
|
128
|
-
messages = [
|
|
129
|
-
{
|
|
130
|
-
"role": "system",
|
|
131
|
-
"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."
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
"role": "user",
|
|
135
|
-
"content": f"Schema:\n{schema_text}\n\nNatural language query: '{nl_query}'"
|
|
136
|
-
}
|
|
137
|
-
]
|
|
138
|
-
|
|
139
|
-
# setup default tool_context to bypass LLM call and save 2-3 secs in testing
|
|
140
|
-
if test_type == 'orchestration': # orchestration: emails to pending orders
|
|
141
|
-
tool_context = \
|
|
142
|
-
[
|
|
143
|
-
{
|
|
144
|
-
"tool": "json-api",
|
|
145
|
-
"method": "GET",
|
|
146
|
-
"url": "http://localhost:5656/api/Order",
|
|
147
|
-
"query_params": {
|
|
148
|
-
"filter": [
|
|
149
|
-
{
|
|
150
|
-
"name": "date_shipped",
|
|
151
|
-
"op": "eq",
|
|
152
|
-
"val": None
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
"name": "date_created",
|
|
156
|
-
"op": "lt",
|
|
157
|
-
"val": "2023-07-14"
|
|
158
|
-
}
|
|
159
|
-
]
|
|
160
|
-
},
|
|
161
|
-
"headers": {
|
|
162
|
-
"Content-Type": "application/json"
|
|
163
|
-
},
|
|
164
|
-
"expected_output": "JSON array of unshipped orders created before 2023-07-14"
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
"tool": "email",
|
|
168
|
-
"method": "POST",
|
|
169
|
-
"url": "http://localhost:5656/api/sendEmail",
|
|
170
|
-
"body": {
|
|
171
|
-
"customer_id": "{{ order.customer_id }}",
|
|
172
|
-
"subject": "Discount Offer",
|
|
173
|
-
"message": "You have a new discount offer for your unshipped order."
|
|
174
|
-
},
|
|
175
|
-
"headers": {
|
|
176
|
-
"Content-Type": "application/json"
|
|
177
|
-
},
|
|
178
|
-
"expected_output": "Confirmation of email sent"
|
|
179
|
-
}
|
|
180
|
-
]
|
|
181
|
-
else: # simple get request - list customers with credit over 4000
|
|
182
|
-
tool_context = \
|
|
183
|
-
[
|
|
184
|
-
{
|
|
185
|
-
"tool": "json-api",
|
|
186
|
-
"method": "GET",
|
|
187
|
-
"url": "http://localhost:5656/api/Customer",
|
|
188
|
-
"query_params": {
|
|
189
|
-
"filter[credit_limit][gt]": 1000
|
|
190
|
-
},
|
|
191
|
-
"headers": {
|
|
192
|
-
"Content-Type": "application/vnd.api+json"
|
|
193
|
-
},
|
|
194
|
-
"expected_output": "JSON array of customers with credit limit over 1000"
|
|
195
|
-
}
|
|
196
|
-
]
|
|
197
|
-
|
|
198
|
-
# Call the OpenAI API to generate the tool context
|
|
199
|
-
if create_tool_context_from_llm: # saves 2-3 seconds...
|
|
200
|
-
response = openai.chat.completions.create(
|
|
201
|
-
model="gpt-4",
|
|
202
|
-
messages=messages,
|
|
203
|
-
temperature=0.2
|
|
204
|
-
)
|
|
205
|
-
|
|
206
|
-
tool_context_str = response.choices[0].message.content
|
|
207
|
-
try:
|
|
208
|
-
tool_context = json.loads(tool_context_str)
|
|
209
|
-
except json.JSONDecodeError:
|
|
210
|
-
print("Failed to decode JSON from response:", tool_context_str)
|
|
211
|
-
return None
|
|
212
|
-
|
|
213
|
-
print("\n2. generated tool context from LLM:\n", json.dumps(tool_context, indent=4))
|
|
214
|
-
return tool_context
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
def process_tool_context(tool_context):
|
|
218
|
-
""" Process the orchestration request by executing multiple tool context blocks.
|
|
219
|
-
This function simulates the MCP Client Executor by executing the tool context blocks
|
|
220
|
-
against a live JSON:API server. It handles both GET and POST requests, and it can
|
|
221
|
-
orchestrate multiple requests based on the provided tool context.
|
|
222
|
-
|
|
223
|
-
Note the orchestration is processed by the client executor (here), not the server executor.
|
|
224
|
-
|
|
225
|
-
Research:
|
|
226
|
-
|
|
227
|
-
1. How is this a "USB", since the request was specific about JSON:API?
|
|
228
|
-
2. How is it clear to loop through the tool_context[0] and call tool_context[1]?
|
|
229
|
-
"""
|
|
230
|
-
global server_url
|
|
231
|
-
|
|
232
|
-
def get_query_param_filter(query_params):
|
|
233
|
-
""" return json:api filter
|
|
234
|
-
|
|
235
|
-
see api_logic_server_cli/prototypes/base/api/system/expression_parser.py (doc?)
|
|
236
|
-
|
|
237
|
-
eg
|
|
238
|
-
curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"eq","val":null},{"name":"CreatedOn","op":"gt","val":"2023-07-14"}]'
|
|
239
|
-
|
|
240
|
-
query_params might be simple:
|
|
241
|
-
"query_params": {
|
|
242
|
-
"filter[credit_limit][gt]": 1000 }
|
|
243
|
-
==> ?filter=[{"name":"credit_limit","op":"gt","val":"1000"}]
|
|
244
|
-
or a list:
|
|
245
|
-
"query_params": {
|
|
246
|
-
"filter": [
|
|
247
|
-
{
|
|
248
|
-
"name": "date_shipped",
|
|
249
|
-
"op": "eq",
|
|
250
|
-
"val": null
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
"name": "date_created",
|
|
254
|
-
"op": "lt",
|
|
255
|
-
"val": "2023-07-14"
|
|
256
|
-
}
|
|
257
|
-
]
|
|
258
|
-
},
|
|
259
|
-
"""
|
|
260
|
-
|
|
261
|
-
added_rows = 0
|
|
262
|
-
|
|
263
|
-
query_param_filter = ''
|
|
264
|
-
if isinstance(query_params, dict):
|
|
265
|
-
if "filter" not in query_params: # simple - "query_params": {"filter[credit_limit][gt]": 1000 }
|
|
266
|
-
for each_key, each_value in query_params.items():
|
|
267
|
-
assert not isinstance(each_value, dict), "Unexpected dict in simple query_params"
|
|
268
|
-
# convert {"filter[credit_limit][gt]": 1000 } to ?filter=[{"name":"credit_limit","op":"gt","val":"1000"}]
|
|
269
|
-
match = re.match(r"filter\[(\w+)\]\[(\w+)\]", each_key)
|
|
270
|
-
if match:
|
|
271
|
-
name, op = match.groups()
|
|
272
|
-
filter_json = json.dumps([{"name": name, "op": op, "val": str(each_value)}])
|
|
273
|
-
query_param_filter += f"&filter={filter_json}"
|
|
274
|
-
else:
|
|
275
|
-
query_param_filter += f"&{each_key}={each_value}"
|
|
276
|
-
|
|
277
|
-
else: # complex - "query_params": {"filter": ...
|
|
278
|
-
assert isinstance(query_params["filter"], list), "Query Params filter expected to be a list"
|
|
279
|
-
query_param_filter = 'filter=' + str(query_params["filter"])
|
|
280
|
-
# use urlencode to convert to JSON:API format...
|
|
281
|
-
# val urllib.parse.quote() or urllib.parse.urlencode()
|
|
282
|
-
# tool instructions... filtering, email etc
|
|
283
|
-
query_param_filter = query_param_filter.replace("'", '"') # convert single quotes to double quotes
|
|
284
|
-
query_param_filter = query_param_filter.replace("None", 'null')
|
|
285
|
-
query_param_filter = query_param_filter.replace("date_created", 'CreatedOn') # TODO - why this name?
|
|
286
|
-
# query_params = ''
|
|
287
|
-
else:
|
|
288
|
-
assert False, "Query Params not a dict"
|
|
289
|
-
return query_param_filter
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
if isinstance(tool_context, dict):
|
|
293
|
-
query_params = tool_context["query_params"]
|
|
294
|
-
query_param_filter = get_query_param_filter(query_params)
|
|
295
|
-
mcp_response = requests.get(
|
|
296
|
-
tool_context["url"],
|
|
297
|
-
headers=tool_context["headers"],
|
|
298
|
-
params=query_param_filter
|
|
299
|
-
)
|
|
300
|
-
elif isinstance(tool_context, list):
|
|
301
|
-
context_data = {}
|
|
302
|
-
added_rows = 0
|
|
303
|
-
|
|
304
|
-
for each_block in tool_context:
|
|
305
|
-
if each_block["tool"] in ["json-api", "email"]:
|
|
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
|
|
312
|
-
)
|
|
313
|
-
context_data = mcp_response.json()['data'] # result rows...
|
|
314
|
-
elif each_block["method"] in ["POST"]:
|
|
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
|
|
333
|
-
print("\n3. MCP Server (als) Response:\n", mcp_response.text)
|
|
334
|
-
if added_rows > 0:
|
|
335
|
-
print(f"...Added {added_rows} rows to the database; last row (only) shown above.")
|
|
336
|
-
return mcp_response
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
if __name__ == "__main__":
|
|
340
|
-
import sys
|
|
341
|
-
|
|
342
|
-
schema_text = discover_mcp_servers() # see: 1-discovery-from-als
|
|
343
|
-
|
|
344
|
-
query = get_user_nl_query()
|
|
345
|
-
|
|
346
|
-
tool_context = query_llm_with_nl(query) # see: 2-tool-context-from-LLM
|
|
347
|
-
|
|
348
|
-
mcp_response = process_tool_context(tool_context) # see: 3-MCP-server response
|
|
349
|
-
|
|
350
|
-
print("\nTest complete.\n")
|