fa-mcp-sdk 0.4.124 → 0.4.134

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 (71) hide show
  1. package/cli-template/AGENTS.md +1 -1
  2. package/cli-template/FA-MCP-SDK-DOC/00-FA-MCP-SDK-index.md +19 -5
  3. package/cli-template/FA-MCP-SDK-DOC/02-1-tools-and-api.md +63 -0
  4. package/cli-template/FA-MCP-SDK-DOC/06-utilities.md +133 -5
  5. package/cli-template/FA-MCP-SDK-DOC/07-testing-and-operations.md +85 -0
  6. package/cli-template/FA-MCP-SDK-DOC/08-agent-tester-and-headless-api.md +284 -0
  7. package/cli-template/FA-MCP-SDK-DOC/10-mcp-apps.md +90 -0
  8. package/cli-template/examples/mcp-apps-canonical/README.md +62 -0
  9. package/cli-template/examples/mcp-apps-canonical/server.ts +95 -0
  10. package/cli-template/examples/mcp-apps-canonical/widget/index.html +147 -0
  11. package/cli-template/package.json +2 -1
  12. package/config/_local.yaml +6 -0
  13. package/config/custom-environment-variables.yaml +5 -0
  14. package/config/default.yaml +15 -0
  15. package/dist/core/_types_/config.d.ts +20 -0
  16. package/dist/core/_types_/config.d.ts.map +1 -1
  17. package/dist/core/_types_/types.d.ts +13 -0
  18. package/dist/core/_types_/types.d.ts.map +1 -1
  19. package/dist/core/agent-tester/agent-tester-router.d.ts.map +1 -1
  20. package/dist/core/agent-tester/agent-tester-router.js +79 -2
  21. package/dist/core/agent-tester/agent-tester-router.js.map +1 -1
  22. package/dist/core/agent-tester/services/TesterAgentService.d.ts +14 -0
  23. package/dist/core/agent-tester/services/TesterAgentService.d.ts.map +1 -1
  24. package/dist/core/agent-tester/services/TesterAgentService.js +101 -1
  25. package/dist/core/agent-tester/services/TesterAgentService.js.map +1 -1
  26. package/dist/core/agent-tester/services/TesterMcpClientService.d.ts +1 -0
  27. package/dist/core/agent-tester/services/TesterMcpClientService.d.ts.map +1 -1
  28. package/dist/core/agent-tester/services/TesterMcpClientService.js +46 -19
  29. package/dist/core/agent-tester/services/TesterMcpClientService.js.map +1 -1
  30. package/dist/core/agent-tester/services/mcp-apps-utils.d.ts +22 -0
  31. package/dist/core/agent-tester/services/mcp-apps-utils.d.ts.map +1 -0
  32. package/dist/core/agent-tester/services/mcp-apps-utils.js +77 -0
  33. package/dist/core/agent-tester/services/mcp-apps-utils.js.map +1 -0
  34. package/dist/core/agent-tester/types.d.ts +65 -0
  35. package/dist/core/agent-tester/types.d.ts.map +1 -1
  36. package/dist/core/index.d.ts +4 -1
  37. package/dist/core/index.d.ts.map +1 -1
  38. package/dist/core/index.js +4 -1
  39. package/dist/core/index.js.map +1 -1
  40. package/dist/core/init-mcp-server.d.ts.map +1 -1
  41. package/dist/core/init-mcp-server.js +46 -5
  42. package/dist/core/init-mcp-server.js.map +1 -1
  43. package/dist/core/mcp/builtin-debug-tools.d.ts +41 -0
  44. package/dist/core/mcp/builtin-debug-tools.d.ts.map +1 -0
  45. package/dist/core/mcp/builtin-debug-tools.js +75 -0
  46. package/dist/core/mcp/builtin-debug-tools.js.map +1 -0
  47. package/dist/core/mcp/debug-trace.d.ts +26 -0
  48. package/dist/core/mcp/debug-trace.d.ts.map +1 -0
  49. package/dist/core/mcp/debug-trace.js +79 -0
  50. package/dist/core/mcp/debug-trace.js.map +1 -0
  51. package/dist/core/mcp/prompts.d.ts.map +1 -1
  52. package/dist/core/mcp/prompts.js +11 -0
  53. package/dist/core/mcp/prompts.js.map +1 -1
  54. package/dist/core/mcp/resources.d.ts.map +1 -1
  55. package/dist/core/mcp/resources.js +11 -0
  56. package/dist/core/mcp/resources.js.map +1 -1
  57. package/dist/core/utils/formatToolResult.d.ts +39 -0
  58. package/dist/core/utils/formatToolResult.d.ts.map +1 -1
  59. package/dist/core/utils/formatToolResult.js +58 -0
  60. package/dist/core/utils/formatToolResult.js.map +1 -1
  61. package/dist/core/utils/testing/debug-tool.d.ts +35 -0
  62. package/dist/core/utils/testing/debug-tool.d.ts.map +1 -0
  63. package/dist/core/utils/testing/debug-tool.js +146 -0
  64. package/dist/core/utils/testing/debug-tool.js.map +1 -0
  65. package/dist/core/web/server-http.d.ts.map +1 -1
  66. package/dist/core/web/server-http.js +26 -1
  67. package/dist/core/web/server-http.js.map +1 -1
  68. package/dist/core/web/static/agent-tester/index.html +55 -0
  69. package/dist/core/web/static/agent-tester/script.js +986 -9
  70. package/dist/core/web/static/agent-tester/styles.css +416 -0
  71. package/package.json +1 -1
@@ -867,6 +867,394 @@ body {
867
867
  cursor: pointer;
868
868
  }
869
869
 
870
+ /* MCP Apps toggle — global, visible on every tab */
871
+ .app-mode-toggle {
872
+ display: inline-flex;
873
+ align-items: center;
874
+ font-size: 12px;
875
+ user-select: none;
876
+ cursor: pointer;
877
+ border: 1px solid var(--border);
878
+ border-radius: var(--radius-md);
879
+ padding: 0 6px;
880
+ background: var(--bg-surface);
881
+ color: var(--text-secondary);
882
+ height: 28px;
883
+ transition: background 0.15s, color 0.15s, border-color 0.15s;
884
+ }
885
+
886
+ .app-mode-toggle input[type="checkbox"] {
887
+ appearance: none;
888
+ width: 14px;
889
+ height: 14px;
890
+ margin: 0 6px 0 0;
891
+ border: 1.5px solid var(--border-strong, var(--border));
892
+ border-radius: 3px;
893
+ background: var(--bg-elevated, var(--bg-surface));
894
+ cursor: pointer;
895
+ position: relative;
896
+ flex-shrink: 0;
897
+ }
898
+
899
+ .app-mode-toggle input[type="checkbox"]:checked {
900
+ background: var(--accent, #7c5cff);
901
+ border-color: var(--accent, #7c5cff);
902
+ }
903
+
904
+ .app-mode-toggle input[type="checkbox"]:checked::after {
905
+ content: '';
906
+ position: absolute;
907
+ left: 3px;
908
+ top: 0px;
909
+ width: 4px;
910
+ height: 8px;
911
+ border: solid #fff;
912
+ border-width: 0 2px 2px 0;
913
+ transform: rotate(45deg);
914
+ }
915
+
916
+ .app-mode-toggle:has(input:checked) {
917
+ border-color: var(--accent, #7c5cff);
918
+ color: var(--accent, #7c5cff);
919
+ background: color-mix(in srgb, var(--accent, #7c5cff) 10%, transparent);
920
+ }
921
+
922
+ .app-mode-toggle-text {
923
+ display: inline-flex;
924
+ align-items: center;
925
+ gap: 4px;
926
+ font-weight: 500;
927
+ }
928
+
929
+ .app-mode-icon {
930
+ font-size: 16px !important;
931
+ }
932
+
933
+ /* Disabled state when transport is STDIO (not supported) */
934
+ .app-mode-toggle.is-disabled {
935
+ opacity: 0.45;
936
+ cursor: not-allowed;
937
+ }
938
+
939
+ .app-mode-toggle.is-disabled input {
940
+ pointer-events: none;
941
+ }
942
+
943
+ /* MCP Apps widget — embedded iframe shell inside an assistant message */
944
+ .app-widget-container {
945
+ margin-top: 12px;
946
+ border: 1px solid var(--border);
947
+ border-radius: var(--radius-md);
948
+ overflow: hidden;
949
+ background: var(--bg-surface);
950
+ }
951
+
952
+ .app-widget-header {
953
+ display: flex;
954
+ align-items: center;
955
+ gap: 8px;
956
+ padding: 6px 8px 6px 12px;
957
+ background: var(--bg-elevated, var(--bg-surface));
958
+ border-bottom: 1px solid var(--border);
959
+ font-size: 12px;
960
+ font-weight: 500;
961
+ color: var(--text-secondary);
962
+ }
963
+
964
+ .app-widget-icon {
965
+ font-size: 16px !important;
966
+ color: var(--accent, #7c5cff);
967
+ }
968
+
969
+ .app-widget-title {
970
+ flex: 1;
971
+ font-family: 'Fira Code', monospace;
972
+ }
973
+
974
+ .app-widget-collapse {
975
+ width: 24px;
976
+ height: 24px;
977
+ padding: 0;
978
+ display: inline-flex;
979
+ align-items: center;
980
+ justify-content: center;
981
+ }
982
+
983
+ .app-widget-collapse .material-icons-round {
984
+ font-size: 18px;
985
+ }
986
+
987
+ .app-widget-body {
988
+ display: block;
989
+ min-height: 180px;
990
+ background: var(--bg-base, #fff);
991
+ }
992
+
993
+ .app-widget-container.is-collapsed .app-widget-body {
994
+ display: none;
995
+ }
996
+
997
+ .app-widget-iframe {
998
+ display: block;
999
+ width: 100%;
1000
+ border: none;
1001
+ background: var(--bg-base, #fff);
1002
+ }
1003
+
1004
+ .app-widget-container.is-poster {
1005
+ opacity: 0.7;
1006
+ }
1007
+
1008
+ .app-widget-poster {
1009
+ padding: 16px;
1010
+ font-size: 12px;
1011
+ color: var(--text-secondary);
1012
+ text-align: center;
1013
+ font-style: italic;
1014
+ }
1015
+
1016
+ .app-widget-confirm-overlay {
1017
+ position: fixed;
1018
+ inset: 0;
1019
+ z-index: 1100;
1020
+ background: rgba(0, 0, 0, 0.42);
1021
+ display: flex;
1022
+ align-items: center;
1023
+ justify-content: center;
1024
+ }
1025
+
1026
+ .app-widget-confirm {
1027
+ background: var(--bg-surface);
1028
+ color: var(--text-primary);
1029
+ padding: 18px 22px 16px;
1030
+ border-radius: var(--radius-lg, 8px);
1031
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.25);
1032
+ max-width: 440px;
1033
+ width: 92%;
1034
+ border-top: 4px solid #d9534f;
1035
+ }
1036
+
1037
+ .app-widget-confirm h3 {
1038
+ margin: 0 0 8px;
1039
+ font-size: 16px;
1040
+ color: #d9534f;
1041
+ }
1042
+
1043
+ .app-widget-confirm p {
1044
+ font-size: 13px;
1045
+ line-height: 1.5;
1046
+ margin: 0 0 12px;
1047
+ }
1048
+
1049
+ .app-widget-confirm code {
1050
+ background: var(--bg-elevated, rgba(0, 0, 0, 0.06));
1051
+ padding: 1px 5px;
1052
+ border-radius: 3px;
1053
+ font-family: 'Fira Code', monospace;
1054
+ font-size: 12px;
1055
+ }
1056
+
1057
+ .app-widget-remember {
1058
+ display: inline-flex;
1059
+ align-items: center;
1060
+ gap: 6px;
1061
+ font-size: 12px;
1062
+ color: var(--text-secondary);
1063
+ margin-bottom: 14px;
1064
+ cursor: pointer;
1065
+ }
1066
+
1067
+ .app-widget-confirm-actions {
1068
+ display: flex;
1069
+ justify-content: flex-end;
1070
+ gap: 8px;
1071
+ }
1072
+
1073
+ /* App Inspector tab */
1074
+ .inspector-pane {
1075
+ display: flex;
1076
+ flex-direction: column;
1077
+ flex: 1;
1078
+ padding: 16px;
1079
+ gap: 16px;
1080
+ overflow: hidden;
1081
+ }
1082
+
1083
+ .inspector-layout {
1084
+ display: grid;
1085
+ grid-template-columns: minmax(280px, 360px) 1fr;
1086
+ gap: 16px;
1087
+ flex: 1;
1088
+ min-height: 0;
1089
+ }
1090
+
1091
+ .inspector-panel {
1092
+ display: flex;
1093
+ flex-direction: column;
1094
+ background: var(--bg-surface);
1095
+ border: 1px solid var(--border);
1096
+ border-radius: var(--radius-lg, 8px);
1097
+ overflow: hidden;
1098
+ min-height: 0;
1099
+ }
1100
+
1101
+ .inspector-section {
1102
+ padding: 8px 14px 14px;
1103
+ border-bottom: 1px solid var(--border);
1104
+ }
1105
+
1106
+ .inspector-section h4 {
1107
+ margin: 4px 0 8px;
1108
+ font-size: 11px;
1109
+ text-transform: uppercase;
1110
+ letter-spacing: 0.07em;
1111
+ color: var(--text-secondary);
1112
+ }
1113
+
1114
+ .inspector-list {
1115
+ list-style: none;
1116
+ margin: 0;
1117
+ padding: 0;
1118
+ display: flex;
1119
+ flex-direction: column;
1120
+ gap: 8px;
1121
+ }
1122
+
1123
+ .inspector-list li {
1124
+ border: 1px solid var(--border);
1125
+ border-radius: var(--radius-md);
1126
+ padding: 8px 10px;
1127
+ background: var(--bg-elevated, var(--bg-surface));
1128
+ }
1129
+
1130
+ .inspector-tool.has-ui {
1131
+ border-left: 3px solid var(--accent, #7c5cff);
1132
+ }
1133
+
1134
+ .inspector-tool-head {
1135
+ display: flex;
1136
+ align-items: center;
1137
+ gap: 8px;
1138
+ font-family: 'Fira Code', monospace;
1139
+ font-size: 12px;
1140
+ }
1141
+
1142
+ .inspector-tool-icon {
1143
+ font-size: 18px !important;
1144
+ color: var(--accent, #7c5cff);
1145
+ }
1146
+
1147
+ .inspector-tool-flag {
1148
+ font-size: 10px;
1149
+ font-weight: 600;
1150
+ padding: 1px 6px;
1151
+ border-radius: 10px;
1152
+ background: var(--accent, #7c5cff);
1153
+ color: #fff;
1154
+ margin-left: auto;
1155
+ }
1156
+
1157
+ .inspector-tool-desc {
1158
+ font-size: 11px;
1159
+ color: var(--text-secondary);
1160
+ margin-top: 4px;
1161
+ line-height: 1.4;
1162
+ }
1163
+
1164
+ .inspector-tool-mime {
1165
+ font-size: 10px;
1166
+ font-family: 'Fira Code', monospace;
1167
+ color: var(--text-secondary);
1168
+ margin-top: 3px;
1169
+ }
1170
+
1171
+ .inspector-empty {
1172
+ font-size: 12px;
1173
+ color: var(--text-secondary);
1174
+ font-style: italic;
1175
+ text-align: center;
1176
+ }
1177
+
1178
+ .inspector-launch {
1179
+ margin-top: 8px;
1180
+ font-size: 11px;
1181
+ padding: 4px 10px;
1182
+ }
1183
+
1184
+ .inspector-log-actions {
1185
+ display: flex;
1186
+ gap: 6px;
1187
+ align-items: center;
1188
+ }
1189
+
1190
+ .inspector-log-actions select {
1191
+ font-size: 12px;
1192
+ padding: 3px 6px;
1193
+ border: 1px solid var(--border);
1194
+ border-radius: var(--radius-md);
1195
+ background: var(--bg-surface);
1196
+ color: var(--text-primary);
1197
+ }
1198
+
1199
+ .inspector-log {
1200
+ flex: 1;
1201
+ margin: 0;
1202
+ padding: 12px 14px;
1203
+ overflow: auto;
1204
+ font-family: 'Fira Code', monospace;
1205
+ font-size: 11px;
1206
+ line-height: 1.5;
1207
+ color: var(--text-primary);
1208
+ background: var(--bg-code, var(--bg-base));
1209
+ white-space: pre;
1210
+ }
1211
+
1212
+ /* Inspector "Launch widget" modal */
1213
+ .inspector-modal-overlay {
1214
+ position: fixed;
1215
+ inset: 0;
1216
+ background: rgba(0, 0, 0, 0.42);
1217
+ z-index: 1050;
1218
+ display: flex;
1219
+ align-items: center;
1220
+ justify-content: center;
1221
+ }
1222
+
1223
+ .inspector-modal {
1224
+ background: var(--bg-surface);
1225
+ width: min(900px, 92%);
1226
+ max-height: 85vh;
1227
+ border-radius: var(--radius-lg, 8px);
1228
+ display: flex;
1229
+ flex-direction: column;
1230
+ overflow: hidden;
1231
+ box-shadow: 0 14px 40px rgba(0, 0, 0, 0.3);
1232
+ }
1233
+
1234
+ .inspector-modal header {
1235
+ display: flex;
1236
+ align-items: center;
1237
+ gap: 8px;
1238
+ padding: 10px 16px;
1239
+ border-bottom: 1px solid var(--border);
1240
+ background: var(--bg-header, var(--bg-surface));
1241
+ }
1242
+
1243
+ .inspector-modal header button {
1244
+ margin-left: auto;
1245
+ }
1246
+
1247
+ .inspector-modal-body {
1248
+ flex: 1;
1249
+ overflow: auto;
1250
+ }
1251
+
1252
+ /* Inspector tab visibility tied to MCP Apps mode */
1253
+ .app:not([data-active-tab]) .app-only-tab,
1254
+ .tabs-bar .app-only-tab {
1255
+ display: inline-flex;
1256
+ }
1257
+
870
1258
  /* --- Chat Messages --- */
871
1259
  .chat-container {
872
1260
  flex: 1;
@@ -2057,6 +2445,32 @@ textarea.prompt-modified {
2057
2445
  grid-template-columns: 1fr 1fr 1fr;
2058
2446
  }
2059
2447
 
2448
+ .tt-layout.tt-has-ui {
2449
+ grid-template-columns: 1fr 1fr 1fr;
2450
+ }
2451
+
2452
+ .tt-layout.tt-has-ui[data-show-schema="true"] {
2453
+ grid-template-columns: 1fr 1fr 1fr 1fr;
2454
+ }
2455
+
2456
+ .tt-ui-body {
2457
+ flex: 1;
2458
+ overflow: auto;
2459
+ padding: 0;
2460
+ background: var(--bg-base, #fff);
2461
+ }
2462
+
2463
+ .tt-ui-badge {
2464
+ font-size: 11px;
2465
+ text-transform: uppercase;
2466
+ letter-spacing: 0.05em;
2467
+ color: var(--accent, #7c5cff);
2468
+ background: color-mix(in srgb, var(--accent, #7c5cff) 12%, transparent);
2469
+ padding: 2px 8px;
2470
+ border-radius: 12px;
2471
+ font-weight: 600;
2472
+ }
2473
+
2060
2474
  .tt-panel {
2061
2475
  display: flex;
2062
2476
  flex-direction: column;
@@ -2153,6 +2567,8 @@ textarea.prompt-modified {
2153
2567
  border-bottom: 1px solid var(--border);
2154
2568
  white-space: pre-wrap;
2155
2569
  word-break: break-word;
2570
+ max-height: 150px;
2571
+ overflow: auto;
2156
2572
  }
2157
2573
 
2158
2574
  .tt-panel-body {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "fa-mcp-sdk",
3
3
  "productName": "FA MCP SDK",
4
- "version": "0.4.124",
4
+ "version": "0.4.134",
5
5
  "description": "Core infrastructure and templates for building Model Context Protocol (MCP) servers with TypeScript",
6
6
  "type": "module",
7
7
  "main": "dist/core/index.js",