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.
Files changed (57) hide show
  1. api_logic_server_cli/api_logic_server.py +4 -122
  2. api_logic_server_cli/api_logic_server_info.yaml +3 -3
  3. api_logic_server_cli/create_from_model/__pycache__/api_logic_server_utils.cpython-312.pyc +0 -0
  4. api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc +0 -0
  5. api_logic_server_cli/create_from_model/api_logic_server_utils.py +29 -10
  6. api_logic_server_cli/create_from_model/dbml.py +16 -9
  7. api_logic_server_cli/database/basic_demo.sqlite +0 -0
  8. api_logic_server_cli/genai/genai.py +4 -0
  9. api_logic_server_cli/genai/genai_svcs.py +10 -2
  10. api_logic_server_cli/manager.py +3 -1
  11. api_logic_server_cli/prototypes/base/.vscode/launch.json +40 -0
  12. api_logic_server_cli/prototypes/base/api/api_discovery/mcp_discovery.py +58 -0
  13. api_logic_server_cli/prototypes/base/database/system/SAFRSBaseX.py +68 -2
  14. api_logic_server_cli/prototypes/base/database/system/SAFRSBaseX.pyZ +73 -0
  15. api_logic_server_cli/prototypes/{basic_demo/customizations/integration → base/integration/mcp}/.DS_Store +0 -0
  16. api_logic_server_cli/prototypes/base/integration/mcp/README_mcp.md +15 -0
  17. api_logic_server_cli/prototypes/base/integration/mcp/mcp_client_executor.py +296 -0
  18. api_logic_server_cli/prototypes/base/integration/mcp/mcp_schema.txt +47 -0
  19. api_logic_server_cli/prototypes/base/integration/mcp/mcp_server_discovery.json +9 -0
  20. api_logic_server_cli/prototypes/base/integration/mcp/test_notes.txt +37 -0
  21. api_logic_server_cli/prototypes/basic_demo/README.md +251 -91
  22. api_logic_server_cli/prototypes/basic_demo/customizations/api/api_discovery/mcp_discovery.py +1 -44
  23. api_logic_server_cli/prototypes/basic_demo/customizations/database/db.sqlite +0 -0
  24. api_logic_server_cli/prototypes/basic_demo/customizations/database/models.py +27 -12
  25. api_logic_server_cli/prototypes/basic_demo/customizations/database/system/SAFRSBaseX.py +5 -2
  26. api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/Zmcp_client_executor.py +294 -0
  27. api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_tool_context.json +25 -0
  28. api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/test_notes.txt +37 -0
  29. api_logic_server_cli/prototypes/basic_demo/customizations/logic/declare_logic.py +1 -20
  30. api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/email_request.py +47 -0
  31. api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/mcp_client_executor_request.py +320 -0
  32. api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/simple_constraints.py +25 -0
  33. api_logic_server_cli/prototypes/basic_demo/customizations/ui/admin/admin.yaml +39 -32
  34. api_logic_server_cli/prototypes/basic_demo/iteration/database/db.sqlite +0 -0
  35. api_logic_server_cli/prototypes/basic_demo/iteration/ui/admin/admin.yaml +39 -44
  36. api_logic_server_cli/prototypes/manager/.vscode/launch.json +21 -0
  37. api_logic_server_cli/prototypes/manager/{README.md → READMEz.md} +4 -4
  38. api_logic_server_cli/prototypes/manager/REAMDE.md +1057 -0
  39. api_logic_server_cli/prototypes/manager/system/genai/mcp_learning/mcp.prompt +27 -0
  40. api_logic_server_cli/prototypes/manager/system/install-ApiLogicServer-dev/install-ApiLogicServer-dev.sh +2 -1
  41. {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.14.dist-info}/METADATA +1 -1
  42. {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.14.dist-info}/RECORD +46 -42
  43. {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.14.dist-info}/WHEEL +1 -1
  44. api_logic_server_cli/prototypes/basic_demo/customizations/integration/mcp/mcp_client_executor.py +0 -350
  45. api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/3_executor_test_agent.py +0 -52
  46. api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/README_functon.md +0 -201
  47. api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/ai_plugin.json +0 -17
  48. api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/nw-swagger_3.json +0 -1731
  49. api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/snippets.txt +0 -5
  50. api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3 genai_demo_with_get.json +0 -1731
  51. api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3.json +0 -1782
  52. api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3_genai_demo.json +0 -264
  53. api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/swagger_3_genai_demo_with_update.json +0 -1782
  54. api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/auto_discovery.py +0 -52
  55. {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.14.dist-info}/entry_points.txt +0 -0
  56. {apilogicserver-14.5.3.dist-info → apilogicserver-14.5.14.dist-info}/licenses/LICENSE +0 -0
  57. {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 dev version of ApiLogicServer and safrs-react-admin on $ostype (version 7.0.15)\n"
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ApiLogicServer
3
- Version: 14.5.3
3
+ Version: 14.5.14
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=MDpVrep3II9xFrADlAdbhN0nuGW2WYURxfzD78llVk4,103450
3
- api_logic_server_cli/api_logic_server_info.yaml,sha256=ae2s1H47bWBmuYY5QuWLXIyhLGUoUR90HLRGjnWrxf0,127
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=ITvz4DXt3PAW5Z5wmeKOWKPBnWHl-E7c_tElrx6QADM,10867
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=64rPLahX-FUu_1AhZlpHf4ljjWnQsYP0g-Ikhjd5pO8,25863
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=fuNWpoRXh1V9VznUM4gLO6Wrs4Ul5jnta7cXMzrdnzI,10971
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=oaOOqBJogGZdW5nVn93zqOY552sumaX5fGANDN42eCQ,26691
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=8kXgynb1JC1EXsPhVIFTDwP70FyxN3GYiPV3Vgb-EzQ,11926
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=v6heXI3w2A0zWWcNXLTe3IJb5-NnAMr2xaLJ42ANlMQ,20480
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=YSCHfRz_W2Ot01iCwLWbwCgj1UF3vUDC7t3ttI-tIqI,46635
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=CoDIF5u7ZD9zm6IyP_VKOXUyEvGGe3xrDXJ7XJhHQCo,47942
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=HoSDdjv9Gi_o32Q-MzvGEWTOzokE1D2FENUf1XQTWoc,11113
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=p8C7AF9r9a_oeO1GcltUqR6YSTbcevbWVm3vhfTT1h0,2540
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=COAWgXJGu0Xn6BHTeLyn9I39xcYHCKBslix7L2Xrodw,13487
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=C_uOn3QlFVF2OYRs2oAQEpCnjUWpZ9J8WKJUClnXIcw,5589
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=VAhzjdz9_LTQNE6lVprZuliyHBGjQOggulM099cinSQ,24576
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=8OBZT1rsTsLbCpgvE8AxC-GTOmXzaN7MwmjssNvOhlE,5284
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/mcp_client_executor.py,sha256=-2-IAJpn559uiuEjOq0In6jeZ_RzyAjK8vKNPHG3vEo,15328
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/openai_function/3_executor_test_agent.py,sha256=vH-3wJvQE99LDt9ID3wWtVw1EOv8yJJNipPGgYINAus,1251
708
- api_logic_server_cli/prototypes/basic_demo/customizations/integration/openai_function/README_functon.md,sha256=h-GPxsEy3wUnX4IcGzH8faBNrDvdV71btmhYq6J6zkY,6639
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=ZbYzcIMXoZV3dsofZoWibsz5iSUtk-cPHZnZT7if4fg,5348
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=DWU-kbGAMbI1NBeK4MIgwGg7DRRNVDNr1vezWDzHoFk,3425
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=up0LBGiq9HiJIHD7eldIi1wRXC3rNYl6nQ98b_1RfEc,24576
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=zN1dtWgBYKqY2D7v173CGUs9n0T4-GjHmDYk0XJ4uvE,4220
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/README.md,sha256=Z5lIaqu27J_pwX40fZdw3sIBwgbH3H6RegIMvJnZoKc,23265
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=UMyprDcKb7bWjhTVaTFLW1l_1WYoTCg9JMzAIt5F0Z8,32527
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=FU_NCbXqML3IjrkPRQfUgxGupzPnc_EEs3vA1xHEcYU,3641
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.3.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
6096
- apilogicserver-14.5.3.dist-info/METADATA,sha256=4qOWJhc-99yDNepZGK9-ca-1PBQwTBag6IQbkyEc8Ho,6524
6097
- apilogicserver-14.5.3.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
6098
- apilogicserver-14.5.3.dist-info/entry_points.txt,sha256=KiLloZJ3c_RW-nIDqBtoE0WEsQTnZ3dELwHLWi23LMA,103
6099
- apilogicserver-14.5.3.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
6100
- apilogicserver-14.5.3.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.7.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -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")