@cyanheads/mcp-ts-core 0.9.1 → 0.9.2

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 (61) hide show
  1. package/CLAUDE.md +2 -1
  2. package/README.md +4 -2
  3. package/changelog/0.9.x/0.9.2.md +55 -0
  4. package/dist/cli/init.js +1 -1
  5. package/dist/cli/init.js.map +1 -1
  6. package/dist/core/serverManifest.d.ts +8 -2
  7. package/dist/core/serverManifest.d.ts.map +1 -1
  8. package/dist/core/serverManifest.js +16 -2
  9. package/dist/core/serverManifest.js.map +1 -1
  10. package/dist/linter/rules/format-parity-rules.d.ts.map +1 -1
  11. package/dist/linter/rules/format-parity-rules.js +134 -106
  12. package/dist/linter/rules/format-parity-rules.js.map +1 -1
  13. package/dist/logs/combined.log +7 -7
  14. package/dist/logs/error.log +5 -5
  15. package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -1
  16. package/dist/mcp-server/transports/http/httpTransport.js +9 -0
  17. package/dist/mcp-server/transports/http/httpTransport.js.map +1 -1
  18. package/dist/mcp-server/transports/http/landing-page/assets/styles.d.ts.map +1 -1
  19. package/dist/mcp-server/transports/http/landing-page/assets/styles.js +90 -72
  20. package/dist/mcp-server/transports/http/landing-page/assets/styles.js.map +1 -1
  21. package/dist/mcp-server/transports/http/landing-page/sections/connect.d.ts +6 -4
  22. package/dist/mcp-server/transports/http/landing-page/sections/connect.d.ts.map +1 -1
  23. package/dist/mcp-server/transports/http/landing-page/sections/connect.js +76 -19
  24. package/dist/mcp-server/transports/http/landing-page/sections/connect.js.map +1 -1
  25. package/dist/mcp-server/transports/http/landing-page/sections/head.d.ts +2 -1
  26. package/dist/mcp-server/transports/http/landing-page/sections/head.d.ts.map +1 -1
  27. package/dist/mcp-server/transports/http/landing-page/sections/head.js +20 -2
  28. package/dist/mcp-server/transports/http/landing-page/sections/head.js.map +1 -1
  29. package/dist/mcp-server/transports/http/landing-page/sections/prompts.js +1 -1
  30. package/dist/mcp-server/transports/http/landing-page/sections/prompts.js.map +1 -1
  31. package/dist/mcp-server/transports/http/landing-page/sections/resources.js +1 -1
  32. package/dist/mcp-server/transports/http/landing-page/sections/resources.js.map +1 -1
  33. package/dist/mcp-server/transports/http/landing-page/sections/tools.js +23 -16
  34. package/dist/mcp-server/transports/http/landing-page/sections/tools.js.map +1 -1
  35. package/dist/mcp-server/transports/http/robotsTxt.d.ts +24 -0
  36. package/dist/mcp-server/transports/http/robotsTxt.d.ts.map +1 -0
  37. package/dist/mcp-server/transports/http/robotsTxt.js +39 -0
  38. package/dist/mcp-server/transports/http/robotsTxt.js.map +1 -0
  39. package/dist/testing/fuzz.js +1 -1
  40. package/dist/testing/fuzz.js.map +1 -1
  41. package/package.json +25 -21
  42. package/scripts/devcheck.ts +27 -0
  43. package/scripts/lint-packaging.ts +116 -0
  44. package/scripts/list-skills.ts +170 -0
  45. package/skills/field-test/SKILL.md +96 -90
  46. package/skills/maintenance/SKILL.md +3 -1
  47. package/skills/multi-server-orchestration/SKILL.md +123 -0
  48. package/skills/multi-server-orchestration/references/greenfield-buildout.md +215 -0
  49. package/skills/multi-server-orchestration/references/maintenance-pass.md +119 -0
  50. package/skills/multi-server-orchestration/references/release-pass.md +189 -0
  51. package/skills/polish-docs-meta/SKILL.md +1 -1
  52. package/skills/polish-docs-meta/references/package-meta.md +1 -1
  53. package/skills/polish-docs-meta/references/readme.md +10 -7
  54. package/skills/polish-docs-meta/references/server-json.md +2 -2
  55. package/skills/release-and-publish/SKILL.md +38 -7
  56. package/skills/setup/SKILL.md +1 -1
  57. package/templates/AGENTS.md +37 -0
  58. package/templates/CLAUDE.md +37 -0
  59. package/templates/_.mcpbignore +13 -0
  60. package/templates/manifest.json +26 -0
  61. package/templates/package.json +6 -1
@@ -131,16 +131,18 @@ body::before {
131
131
  pointer-events: none;
132
132
  }
133
133
 
134
- /* Ambient background — dual radial glow (accent top-left, accent-2 top-right) + fine dot grid. */
134
+ /* Ambient background — single soft accent wash at top + fine dot grid.
135
+ Previously dual radials; the second one read as decoration without earning
136
+ its weight. One directional glow + the grid is enough to anchor the page
137
+ without competing with content. */
135
138
  body::after {
136
139
  content: "";
137
140
  position: fixed;
138
141
  inset: 0;
139
142
  background-image:
140
- radial-gradient(ellipse 70% 55% at 12% -5%, color-mix(in oklab, var(--accent), transparent calc((1 - var(--glow-strength)) * 100%)), transparent 60%),
141
- radial-gradient(ellipse 55% 45% at 92% 10%, color-mix(in oklab, var(--accent-2), transparent calc((1 - var(--glow-strength)) * 115%)), transparent 55%),
143
+ radial-gradient(ellipse 80% 50% at 20% -8%, color-mix(in oklab, var(--accent), transparent calc((1 - var(--glow-strength)) * 100%)), transparent 60%),
142
144
  radial-gradient(circle at center, var(--grid-dot) 1px, transparent 1.5px);
143
- background-size: 100% 100%, 100% 100%, 24px 24px;
145
+ background-size: 100% 100%, 24px 24px;
144
146
  pointer-events: none;
145
147
  z-index: -1;
146
148
  }
@@ -253,7 +255,12 @@ pre code { background: transparent; padding: 0; border: 0; font-size: inherit; }
253
255
  letter-spacing: -0.04em;
254
256
  line-height: 1.02;
255
257
  color: var(--fg);
258
+ /* overflow-wrap: anywhere lets long scoped package names break at any
259
+ character if needed (e.g. @cyanheads/pubmed-mcp-server) rather than
260
+ forcing the title to wrap mid-row and shove the version badge to its
261
+ own line. word-break: break-word kept as a fallback. */
256
262
  word-break: break-word;
263
+ overflow-wrap: anywhere;
257
264
  flex: 1 1 auto;
258
265
  min-width: 0;
259
266
  }
@@ -504,14 +511,28 @@ pre code { background: transparent; padding: 0; border: 0; font-size: inherit; }
504
511
  white-space: nowrap;
505
512
  transition: color var(--duration-fast) var(--ease-out),
506
513
  border-color var(--duration-fast) var(--ease-out),
507
- background var(--duration-fast) var(--ease-out);
514
+ background var(--duration-fast) var(--ease-out),
515
+ box-shadow var(--duration-fast) var(--ease-out);
508
516
  }
509
517
  .connect-tab-label:hover { color: var(--fg); }
518
+ /*
519
+ * Active tab — brighter text (var(--fg) is the max contrast token in both
520
+ * modes), accent gradient fill, plus a "thin glow outline" that adapts to
521
+ * light/dark via color-mix against --fg. Both shadow layers are inset
522
+ * because the tab strip clips overflow on both axes (overflow-x: auto
523
+ * forces overflow-y to auto), so an outer glow would be cut off:
524
+ * inset 0 0 0 1px -> the sharp rectangular ring at the label edge
525
+ * inset 0 0 14px -> the soft halo bleeding inward from that edge
526
+ * Kept rectangular (no border-radius) so the outline traces the label edge.
527
+ */
510
528
  .connect-tab-input:checked + .connect-tab-label {
511
529
  color: var(--fg);
512
- font-weight: 600;
530
+ font-weight: 700;
513
531
  border-bottom-color: var(--accent);
514
- background: linear-gradient(to top, var(--accent-softer), transparent 70%);
532
+ background: linear-gradient(to top, var(--accent-soft), var(--accent-softer) 55%, transparent 100%);
533
+ box-shadow:
534
+ inset 0 0 0 1px color-mix(in oklab, var(--fg), transparent 25%),
535
+ inset 0 0 14px color-mix(in oklab, var(--fg), transparent 70%);
515
536
  }
516
537
  .connect-tab-input:focus-visible + .connect-tab-label {
517
538
  outline: 2px solid var(--accent);
@@ -521,9 +542,12 @@ pre code { background: transparent; padding: 0; border: 0; font-size: inherit; }
521
542
 
522
543
  .connect-panels { position: relative; padding: var(--space-5) var(--space-4); }
523
544
  .connect-panel { display: none; }
545
+ .connect:has(#connect-tab-claude:checked) .panel-claude,
546
+ .connect:has(#connect-tab-codex:checked) .panel-codex,
547
+ .connect:has(#connect-tab-cursor:checked) .panel-cursor,
548
+ .connect:has(#connect-tab-gemini:checked) .panel-gemini,
524
549
  .connect:has(#connect-tab-stdio:checked) .panel-stdio,
525
550
  .connect:has(#connect-tab-http:checked) .panel-http,
526
- .connect:has(#connect-tab-claude:checked) .panel-claude,
527
551
  .connect:has(#connect-tab-curl:checked) .panel-curl { display: block; }
528
552
  /* Fallback when :has() unsupported — show first visible panel */
529
553
  @supports not selector(:has(*)) {
@@ -602,21 +626,25 @@ pre code { background: transparent; padding: 0; border: 0; font-size: inherit; }
602
626
 
603
627
  /* -------------------- Sections -------------------- */
604
628
 
605
- section { padding: var(--space-12) 0 0; }
629
+ section { padding: var(--space-10) 0 0; }
606
630
 
631
+ /* Section heading — reference-style. The heading is lowercase mono with a
632
+ thin accent bar; the count rides as a mono numeral at the same weight.
633
+ Restraint here keeps the visual budget on the cards below. */
607
634
  .section-heading {
608
635
  display: flex;
609
636
  align-items: baseline;
610
637
  gap: var(--space-3);
611
- margin: 0 0 var(--space-6);
612
- padding-bottom: var(--space-3);
638
+ margin: 0 0 var(--space-5);
639
+ padding-bottom: var(--space-2);
613
640
  border-bottom: 1px solid var(--border-subtle);
614
641
  }
615
642
  .section-heading h2 {
616
643
  margin: 0;
617
- font-size: var(--text-2xl);
644
+ font-family: var(--font-mono);
645
+ font-size: var(--text-base);
618
646
  font-weight: 600;
619
- letter-spacing: -0.025em;
647
+ letter-spacing: 0.02em;
620
648
  color: var(--fg);
621
649
  text-transform: lowercase;
622
650
  display: inline-flex;
@@ -626,54 +654,40 @@ section { padding: var(--space-12) 0 0; }
626
654
  .section-heading h2::before {
627
655
  content: "";
628
656
  display: inline-block;
629
- width: 3px;
630
- height: 0.9em;
631
- background: linear-gradient(180deg, var(--accent), var(--accent-2));
632
- border-radius: 2px;
657
+ width: 2px;
658
+ height: 0.95em;
659
+ background: var(--accent);
660
+ border-radius: 1px;
633
661
  flex-shrink: 0;
634
662
  }
635
663
  .section-count {
636
664
  font-family: var(--font-mono);
637
- font-size: var(--text-2xl);
665
+ font-size: var(--text-base);
638
666
  font-weight: 600;
639
667
  color: var(--accent);
640
668
  font-variant-numeric: tabular-nums;
641
- letter-spacing: -0.02em;
669
+ letter-spacing: 0;
642
670
  line-height: 1;
643
671
  }
644
672
 
645
673
  .group-heading {
646
- margin: var(--space-6) 0 var(--space-3);
647
- color: var(--fg-muted);
674
+ margin: var(--space-5) 0 var(--space-2);
675
+ color: var(--fg-subtle);
648
676
  font-family: var(--font-mono);
649
- font-size: 0.6875rem;
677
+ font-size: 0.625rem;
650
678
  font-weight: 600;
651
- text-transform: lowercase;
652
- letter-spacing: 0.06em;
679
+ text-transform: uppercase;
680
+ letter-spacing: 0.1em;
653
681
  display: flex;
654
682
  align-items: baseline;
655
683
  gap: var(--space-2);
656
- position: relative;
657
- padding-left: var(--space-3);
658
- }
659
- .group-heading::before {
660
- content: "";
661
- position: absolute;
662
- left: 0;
663
- top: 50%;
664
- transform: translateY(-50%);
665
- width: 2px;
666
- height: 0.85em;
667
- background: var(--accent);
668
- border-radius: 1px;
669
684
  }
670
685
  .group-heading:first-child { margin-top: 0; }
671
- .group-heading[data-group="read"]::before { background: #16a34a; }
672
- .group-heading[data-group="destructive"]::before { background: #dc2626; }
673
686
  .group-count {
674
687
  color: var(--fg-subtle);
675
688
  font-weight: 500;
676
689
  font-variant-numeric: tabular-nums;
690
+ opacity: 0.7;
677
691
  }
678
692
 
679
693
  /* -------------------- Tool filter bar -------------------- */
@@ -823,37 +837,37 @@ section { padding: var(--space-12) 0 0; }
823
837
 
824
838
  .card-grid {
825
839
  display: grid;
826
- grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
827
- gap: var(--space-3);
840
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
841
+ gap: var(--space-2);
828
842
  align-items: stretch;
829
843
  }
830
844
  .card {
831
845
  border: 1px solid var(--border-subtle);
832
- border-radius: var(--radius-md);
833
- padding: var(--space-4) var(--space-5);
846
+ border-radius: var(--radius-sm);
847
+ padding: var(--space-3) var(--space-4);
834
848
  background: var(--bg-elevated);
835
849
  display: flex;
836
850
  flex-direction: column;
837
851
  gap: var(--space-2);
838
852
  transition: border-color var(--duration-fast) var(--ease-out),
839
- transform var(--duration-fast) var(--ease-out),
840
853
  box-shadow var(--duration-fast) var(--ease-out);
841
854
  position: relative;
842
855
  height: 100%;
843
856
  }
844
857
 
845
- /* Mutability spine — 3px tonal strip down the left edge of each tool
846
- card. Bird's-eye scannability: a row of cards reads as a row of
847
- colored bars before the eye lands on any title. */
848
- .tool-card { padding-left: calc(var(--space-5) + 3px); }
858
+ /* Mutability spine — 2px tonal strip down the left edge of each tool
859
+ card. The primary bird's-eye signal: a row of cards reads as a row of
860
+ colored bars before the eye lands on any title. Pill in card meta is
861
+ the redundant a11y backup for non-color signal. */
862
+ .tool-card { padding-left: calc(var(--space-4) + 2px); }
849
863
  .tool-card::before {
850
864
  content: "";
851
865
  position: absolute;
852
866
  left: 0;
853
867
  top: var(--space-2);
854
868
  bottom: var(--space-2);
855
- width: 3px;
856
- border-radius: 0 2px 2px 0;
869
+ width: 2px;
870
+ border-radius: 0 1px 1px 0;
857
871
  background: var(--card-spine, var(--border-strong));
858
872
  transition: background var(--duration-fast) var(--ease-out);
859
873
  }
@@ -868,8 +882,7 @@ section { padding: var(--space-12) 0 0; }
868
882
  }
869
883
 
870
884
  /* Disabled tool card — muted overall to read as "present but not callable".
871
- Hover lift is disabled too; no invocation snippet means there's no
872
- interactive payoff to suggest. */
885
+ No interactive payoff means no hover affordance. */
873
886
  .tool-card--disabled {
874
887
  background: var(--bg-subtle);
875
888
  border-style: dashed;
@@ -878,19 +891,19 @@ section { padding: var(--space-12) 0 0; }
878
891
  .tool-card--disabled .card-desc { color: var(--fg-subtle); }
879
892
  .tool-card--disabled:hover {
880
893
  border-color: var(--border-strong);
881
- transform: none;
882
894
  box-shadow: none;
883
895
  }
884
896
  .tool-card--disabled::before { opacity: 0.5; }
897
+ /* Hover: border darkens to accent edge + a quiet accent-tinted shadow.
898
+ Dropped the translateY lift — too "product card" for a reference surface. */
885
899
  .card:hover {
886
900
  border-color: var(--accent-edge);
887
- transform: translateY(-1px);
888
- box-shadow: 0 8px 28px -12px var(--accent-glow), var(--shadow-md);
901
+ box-shadow: 0 4px 16px -10px var(--accent-glow);
889
902
  }
890
903
  .card-head {
891
904
  display: flex;
892
- align-items: center;
893
- gap: var(--space-2);
905
+ align-items: baseline;
906
+ gap: var(--space-2) var(--space-3);
894
907
  flex-wrap: wrap;
895
908
  }
896
909
  .card-title {
@@ -900,6 +913,8 @@ section { padding: var(--space-12) 0 0; }
900
913
  font-family: var(--font-mono);
901
914
  color: var(--fg);
902
915
  letter-spacing: -0.015em;
916
+ flex: 1 1 auto;
917
+ min-width: 0;
903
918
  }
904
919
  .card-title a { color: inherit; }
905
920
  .card-title a:hover { color: var(--accent); text-decoration: none; }
@@ -908,15 +923,14 @@ section { padding: var(--space-12) 0 0; }
908
923
  color: var(--fg-muted);
909
924
  font-size: var(--text-sm);
910
925
  line-height: 1.5;
911
- /* 3-line preview clamp keeps cards uniform; full text stays in DOM
912
- for screen readers and view-source. Non-WebKit engines fall back
913
- to the natural height overflow:hidden truncates to 3 lines via
914
- max-height as a graceful degradation. */
926
+ /* 2-line preview clamp most tool/resource/prompt descriptions fit. Full
927
+ text stays in DOM for screen readers and view-source. Non-WebKit engines
928
+ fall back to the natural height via max-height. */
915
929
  display: -webkit-box;
916
- -webkit-line-clamp: 3;
930
+ -webkit-line-clamp: 2;
917
931
  -webkit-box-orient: vertical;
918
932
  overflow: hidden;
919
- max-height: calc(1.5em * 3);
933
+ max-height: calc(1.5em * 2);
920
934
  }
921
935
  .card-meta {
922
936
  display: flex;
@@ -942,12 +956,11 @@ section { padding: var(--space-12) 0 0; }
942
956
  }
943
957
 
944
958
  /* Card footer — pinned to the bottom so cards align across a row even
945
- when descriptions vary in length. Carries the scope chip on the left
946
- and the invocation/schema action triggers on the right. */
959
+ when descriptions vary in length. No divider line: the card already has
960
+ its own border + bg, and a foot rule competed with the spine. */
947
961
  .card-foot {
948
962
  margin-top: auto;
949
- padding-top: var(--space-3);
950
- border-top: 1px solid var(--border-subtle);
963
+ padding-top: var(--space-2);
951
964
  display: flex;
952
965
  flex-wrap: wrap;
953
966
  align-items: center;
@@ -1009,15 +1022,15 @@ section { padding: var(--space-12) 0 0; }
1009
1022
  .card-detail[open] > summary { color: var(--accent); }
1010
1023
  /* When a detail opens, push its content full-width below the footer. The
1011
1024
  negative side margins recover the card's horizontal padding so the
1012
- panel spans edge-to-edge. */
1025
+ panel spans edge-to-edge. Margin values track .card padding. */
1013
1026
  .card-detail[open] {
1014
1027
  width: 100%;
1015
- margin: var(--space-3) calc(var(--space-5) * -1) calc(var(--space-4) * -1);
1016
- padding: 0 var(--space-5) var(--space-4);
1028
+ margin: var(--space-2) calc(var(--space-4) * -1) calc(var(--space-3) * -1);
1029
+ padding: 0 var(--space-4) var(--space-3);
1017
1030
  background: var(--bg-subtle);
1018
1031
  border-top: 1px solid var(--border-subtle);
1019
1032
  }
1020
- .card-detail[open] > summary { padding-top: var(--space-3); }
1033
+ .card-detail[open] > summary { padding-top: var(--space-2); }
1021
1034
  /* When any detail is open the actions row needs to wrap so the open
1022
1035
  panel can claim full width. The :has() selector handles this in
1023
1036
  modern engines; older browsers tolerate the actions row stacking
@@ -1033,6 +1046,11 @@ section { padding: var(--space-12) 0 0; }
1033
1046
 
1034
1047
  /* Annotation pills — dot-chip style */
1035
1048
  .pill-row { display: inline-flex; flex-wrap: wrap; gap: 5px; align-items: center; }
1049
+ /* Meta-row variant: pills sit in the card meta strip below the description,
1050
+ so they're calmer than the aux pills next to the title — no leading dot,
1051
+ tighter padding, slightly smaller. */
1052
+ .pill-row--meta .pill { padding: 1px 6px; font-size: 0.625rem; }
1053
+ .pill-row--meta .pill::before { display: none; }
1036
1054
  .pill {
1037
1055
  display: inline-flex;
1038
1056
  align-items: center;
@@ -1140,7 +1158,7 @@ section { padding: var(--space-12) 0 0; }
1140
1158
 
1141
1159
  .source-link {
1142
1160
  font-size: var(--text-xs);
1143
- color: var(--fg-muted);
1161
+ color: var(--fg-subtle);
1144
1162
  margin-left: auto;
1145
1163
  font-family: var(--font-mono);
1146
1164
  transition: color var(--duration-fast);
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/assets/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEtE,2EAA2E;AAC3E,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;IACpE,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;cAoBA,UAAU;wCACgB,UAAU;uCACX,UAAU;uCACV,UAAU;yCACR,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2vClD,CAAC;IACA,OAAO,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/assets/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEtE,2EAA2E;AAC3E,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;IACpE,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;cAoBA,UAAU;wCACgB,UAAU;uCACX,UAAU;uCACV,UAAU;yCACR,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6wClD,CAAC;IACA,OAAO,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,8 +1,10 @@
1
1
  /**
2
- * @fileoverview Terminal-chrome connect card with STDIO / HTTP / Claude / curl
3
- * tabs. Generates copy-paste-ready client configs and commands from the
4
- * server manifest. Radio-input + `:has()` CSS hack drives tab switching with
5
- * no JS.
2
+ * @fileoverview Terminal-chrome connect card with one tab per common MCP
3
+ * client (Claude, Codex, Cursor, Gemini) plus transport / protocol fallbacks
4
+ * (STDIO, HTTP, curl). Generates copy-paste-ready client configs and commands
5
+ * from the server manifest. Radio-input + `:has()` CSS hack drives tab
6
+ * switching with no JS; the `claude` tab is the default checked panel because
7
+ * it's the most common visitor conversion path.
6
8
  *
7
9
  * Accessibility: the ARIA tab pattern (`role="tablist"`/`"tab"`/`"tabpanel"`
8
10
  * + `aria-selected`/`aria-controls`) is a poor fit for a radio-input-driven
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEjE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAmHzF"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEjE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAyIzF"}
@@ -1,8 +1,10 @@
1
1
  /**
2
- * @fileoverview Terminal-chrome connect card with STDIO / HTTP / Claude / curl
3
- * tabs. Generates copy-paste-ready client configs and commands from the
4
- * server manifest. Radio-input + `:has()` CSS hack drives tab switching with
5
- * no JS.
2
+ * @fileoverview Terminal-chrome connect card with one tab per common MCP
3
+ * client (Claude, Codex, Cursor, Gemini) plus transport / protocol fallbacks
4
+ * (STDIO, HTTP, curl). Generates copy-paste-ready client configs and commands
5
+ * from the server manifest. Radio-input + `:has()` CSS hack drives tab
6
+ * switching with no JS; the `claude` tab is the default checked panel because
7
+ * it's the most common visitor conversion path.
6
8
  *
7
9
  * Accessibility: the ARIA tab pattern (`role="tablist"`/`"tab"`/`"tabpanel"`
8
10
  * + `aria-selected`/`aria-controls`) is a poor fit for a radio-input-driven
@@ -54,12 +56,16 @@ export function renderConnectSnippets(manifest, baseUrl) {
54
56
  },
55
57
  },
56
58
  }, null, 2);
57
- // `claude mcp add` — always target the HTTP endpoint. The landing page is
58
- // served over HTTP, so a visitor is already interacting with this
59
- // instance; a stdio/bunx command here would install a different (local)
60
- // copy and carry env placeholders that HTTP wouldn't forward anyway. The
61
- // STDIO tab still carries the JSON for anyone who wants to run locally.
59
+ // Per-client install snippets — always target the HTTP endpoint. The
60
+ // landing page is served over HTTP, so a visitor is already interacting
61
+ // with this instance; a stdio/bunx command in these tabs would install a
62
+ // different (local) copy and carry env placeholders that HTTP wouldn't
63
+ // forward anyway. The STDIO tab below still carries the JSON for anyone
64
+ // who wants to run locally.
62
65
  const claudeCmd = overrides.claude ?? buildClaudeHttpCmd(shortName, endpoint);
66
+ const codexCmd = overrides.codex ?? buildCodexHttpCmd(shortName, endpoint);
67
+ const cursorConfig = overrides.cursor ?? buildCursorHttpConfig(shortName, endpoint);
68
+ const geminiCmd = overrides.gemini ?? buildGeminiHttpCmd(shortName, endpoint);
63
69
  const curl = overrides.curl ??
64
70
  [
65
71
  `curl -X POST ${endpoint} \\`,
@@ -69,7 +75,35 @@ export function renderConnectSnippets(manifest, baseUrl) {
69
75
  ].join('\n');
70
76
  // Chrome label — npm package when published, else the HTTP endpoint (trimmed).
71
77
  const chromeLabel = npmPackage ?? endpoint.replace(/^https?:\/\//, '');
78
+ // Order is the rendered tab order. `claude` leads as the default conversion
79
+ // path; named clients follow alphabetically; transport / protocol fallbacks
80
+ // bring up the rear. The default checked tab is wired by id below — keep
81
+ // it in sync with `DEFAULT_TAB`.
72
82
  const panels = [
83
+ {
84
+ id: 'claude',
85
+ label: 'Claude',
86
+ content: claudeCmd,
87
+ copyAriaLabel: 'Copy claude mcp add command',
88
+ },
89
+ {
90
+ id: 'codex',
91
+ label: 'Codex',
92
+ content: codexCmd,
93
+ copyAriaLabel: 'Copy codex mcp add command',
94
+ },
95
+ {
96
+ id: 'cursor',
97
+ label: 'Cursor',
98
+ content: cursorConfig,
99
+ copyAriaLabel: 'Copy Cursor mcp.json config',
100
+ },
101
+ {
102
+ id: 'gemini',
103
+ label: 'Gemini',
104
+ content: geminiCmd,
105
+ copyAriaLabel: 'Copy gemini mcp add command',
106
+ },
73
107
  { id: 'stdio', label: 'STDIO', content: stdioConfig, copyAriaLabel: 'Copy stdio config' },
74
108
  {
75
109
  id: 'http',
@@ -77,12 +111,6 @@ export function renderConnectSnippets(manifest, baseUrl) {
77
111
  content: httpConfig,
78
112
  copyAriaLabel: 'Copy HTTP config',
79
113
  },
80
- {
81
- id: 'claude',
82
- label: 'Claude',
83
- content: claudeCmd,
84
- copyAriaLabel: 'Copy claude mcp add command',
85
- },
86
114
  { id: 'curl', label: 'curl', content: curl, copyAriaLabel: 'Copy curl command' },
87
115
  ];
88
116
  return html `
@@ -95,11 +123,10 @@ export function renderConnectSnippets(manifest, baseUrl) {
95
123
  </span>
96
124
  <span class="connect-chrome-endpoint" title="${endpoint}">${chromeLabel}</span>
97
125
  </div>
98
- ${panels.map((p, i) => i === 0
99
- ? html `<input type="radio" class="connect-tab-input" name="connect" id="connect-tab-${p.id}" checked />`
100
- : html `<input type="radio" class="connect-tab-input" name="connect" id="connect-tab-${p.id}" />`)}
101
126
  <div class="connect-tabs">
102
- ${panels.map((p) => html `<label for="connect-tab-${p.id}" class="connect-tab-label">${p.label}</label>`)}
127
+ ${panels.map((p) => p.id === DEFAULT_TAB
128
+ ? html `<input type="radio" class="connect-tab-input" name="connect" id="connect-tab-${p.id}" checked /><label for="connect-tab-${p.id}" class="connect-tab-label">${p.label}</label>`
129
+ : html `<input type="radio" class="connect-tab-input" name="connect" id="connect-tab-${p.id}" /><label for="connect-tab-${p.id}" class="connect-tab-label">${p.label}</label>`)}
103
130
  </div>
104
131
  <div class="connect-panels">
105
132
  ${panels.map((p) => renderConnectPanel(p.id, p.content, p.copyAriaLabel))}
@@ -107,6 +134,13 @@ export function renderConnectSnippets(manifest, baseUrl) {
107
134
  </div>
108
135
  `;
109
136
  }
137
+ /**
138
+ * Default selected tab id. Claude is the most common conversion path for
139
+ * MCP visitors; if it ever moves, the `@supports not selector(:has(*))`
140
+ * fallback in styles.ts (which shows `.connect-panel:first-of-type`) needs
141
+ * to stay aligned with the first entry in the panels array.
142
+ */
143
+ const DEFAULT_TAB = 'claude';
110
144
  /**
111
145
  * Single panel inside the connect card — pre/code + copy button.
112
146
  *
@@ -142,4 +176,27 @@ function envFromEntries(entries) {
142
176
  function buildClaudeHttpCmd(shortName, endpoint) {
143
177
  return `claude mcp add --transport http ${shortName} ${endpoint}`;
144
178
  }
179
+ /** `codex mcp add <name> --url <url>` — adds a streamable-HTTP server to `~/.codex/config.toml`. */
180
+ function buildCodexHttpCmd(shortName, endpoint) {
181
+ return `codex mcp add ${shortName} --url ${endpoint}`;
182
+ }
183
+ /** `gemini mcp add --transport http <name> <url>` — writes to `~/.gemini/settings.json`. */
184
+ function buildGeminiHttpCmd(shortName, endpoint) {
185
+ return `gemini mcp add --transport http ${shortName} ${endpoint}`;
186
+ }
187
+ /**
188
+ * Cursor has no first-party CLI; users paste a `mcpServers` block into
189
+ * `~/.cursor/mcp.json` (or `.cursor/mcp.json` per-project). The bare `url`
190
+ * field is the modern streamable-HTTP shape — Cursor handles transport
191
+ * negotiation internally.
192
+ */
193
+ function buildCursorHttpConfig(shortName, endpoint) {
194
+ return JSON.stringify({
195
+ mcpServers: {
196
+ [shortName]: {
197
+ url: endpoint,
198
+ },
199
+ },
200
+ }, null, 2);
201
+ }
145
202
  //# sourceMappingURL=connect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/connect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,IAAI,EAAiB,MAAM,4BAA4B,CAAC;AAEjE,MAAM,UAAU,qBAAqB,CAAC,QAAwB,EAAE,OAAe;IAC7E,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;IACnF,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;IACrD,+EAA+E;IAC/E,6EAA6E;IAC7E,0BAA0B;IAC1B,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/C,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,wEAAwE;IACxE,4DAA4D;IAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC;IAEnD,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,gBAAgB;IAChB,MAAM,WAAW,GACf,SAAS,CAAC,KAAK;QACf,IAAI,CAAC,SAAS,CACZ;YACE,UAAU,EAAE;gBACV,CAAC,SAAS,CAAC,EAAE;oBACX,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC;oBACtE,GAAG,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;iBACnC;aACF;SACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IAEJ,2EAA2E;IAC3E,2EAA2E;IAC3E,qEAAqE;IACrE,oEAAoE;IACpE,MAAM,UAAU,GACd,SAAS,CAAC,IAAI;QACd,IAAI,CAAC,SAAS,CACZ;YACE,UAAU,EAAE;gBACV,CAAC,SAAS,CAAC,EAAE;oBACX,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,QAAQ;iBACd;aACF;SACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IAEJ,qEAAqE;IACrE,wEAAwE;IACxE,yEAAyE;IACzE,uEAAuE;IACvE,wEAAwE;IACxE,4BAA4B;IAC5B,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,IAAI,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,IAAI,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,IAAI,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,IAAI,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE9E,MAAM,IAAI,GACR,SAAS,CAAC,IAAI;QACd;YACE,gBAAgB,QAAQ,KAAK;YAC7B,0CAA0C;YAC1C,+BAA+B,QAAQ,CAAC,QAAQ,CAAC,aAAa,MAAM;YACpE,oFAAoF,QAAQ,CAAC,QAAQ,CAAC,aAAa,uEAAuE;SAC3L,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEf,+EAA+E;IAC/E,MAAM,WAAW,GAAG,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAEvE,4EAA4E;IAC5E,4EAA4E;IAC5E,yEAAyE;IACzE,iCAAiC;IACjC,MAAM,MAAM,GAAiF;QAC3F;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,SAAS;YAClB,aAAa,EAAE,6BAA6B;SAC7C;QACD;YACE,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,QAAQ;YACjB,aAAa,EAAE,4BAA4B;SAC5C;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,YAAY;YACrB,aAAa,EAAE,6BAA6B;SAC7C;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,SAAS;YAClB,aAAa,EAAE,6BAA6B;SAC7C;QACD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE;QACzF;YACE,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,UAAU;YACnB,aAAa,EAAE,kBAAkB;SAClC;QACD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,mBAAmB,EAAE;KACjF,CAAC;IAEF,OAAO,IAAI,CAAA;;;;;;;;uDAQ0C,QAAQ,KAAK,WAAW;;;UAGrE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACjB,CAAC,CAAC,EAAE,KAAK,WAAW;QAClB,CAAC,CAAC,IAAI,CAAA,gFAAgF,CAAC,CAAC,EAAE,uCAAuC,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC,KAAK,UAAU;QACrL,CAAC,CAAC,IAAI,CAAA,gFAAgF,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC,KAAK,UAAU,CAChL;;;UAGC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;;;GAG9E,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,WAAW,GAAG,QAAQ,CAAC;AAE7B;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CAAC,EAAU,EAAE,OAAe,EAAE,aAAqB;IAC5E,MAAM,SAAS,GAAG,mBAAmB,EAAE,EAAE,CAAC;IAC1C,OAAO,IAAI,CAAA;sCACyB,EAAE;iBACvB,SAAS,2BAA2B,OAAO;gFACoB,SAAS,iBAAiB,aAAa;;GAEpH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,UAAkB;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC/D,CAAC;AAED,oFAAoF;AACpF,SAAS,cAAc,CACrB,OAAsD;IAEtD,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,qDAAqD;AACrD,SAAS,kBAAkB,CAAC,SAAiB,EAAE,QAAgB;IAC7D,OAAO,mCAAmC,SAAS,IAAI,QAAQ,EAAE,CAAC;AACpE,CAAC;AAED,oGAAoG;AACpG,SAAS,iBAAiB,CAAC,SAAiB,EAAE,QAAgB;IAC5D,OAAO,iBAAiB,SAAS,UAAU,QAAQ,EAAE,CAAC;AACxD,CAAC;AAED,4FAA4F;AAC5F,SAAS,kBAAkB,CAAC,SAAiB,EAAE,QAAgB;IAC7D,OAAO,mCAAmC,SAAS,IAAI,QAAQ,EAAE,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,SAAiB,EAAE,QAAgB;IAChE,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,UAAU,EAAE;YACV,CAAC,SAAS,CAAC,EAAE;gBACX,GAAG,EAAE,QAAQ;aACd;SACF;KACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * @fileoverview `<head>` metadata renderer — title, description, Open Graph
3
3
  * tags, theme color, JSON-LD structured data, favicon (when a data URI logo
4
- * is available), and the `mcp-endpoint` / server-card alternate links.
4
+ * is available), canonical link, framework generator meta (when attribution
5
+ * is on), and the `mcp-endpoint` / server-card alternate links.
5
6
  *
6
7
  * @module src/mcp-server/transports/http/landing-page/sections/head
7
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"head.d.ts","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/head.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAQ,KAAK,QAAQ,EAAa,MAAM,4BAA4B,CAAC;AAE5E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CA0C9E"}
1
+ {"version":3,"file":"head.d.ts","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/head.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAQ,KAAK,QAAQ,EAAa,MAAM,4BAA4B,CAAC;AAS5E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAqD9E"}
@@ -1,13 +1,20 @@
1
1
  /**
2
2
  * @fileoverview `<head>` metadata renderer — title, description, Open Graph
3
3
  * tags, theme color, JSON-LD structured data, favicon (when a data URI logo
4
- * is available), and the `mcp-endpoint` / server-card alternate links.
4
+ * is available), canonical link, framework generator meta (when attribution
5
+ * is on), and the `mcp-endpoint` / server-card alternate links.
5
6
  *
6
7
  * @module src/mcp-server/transports/http/landing-page/sections/head
7
8
  */
8
9
  import { html, unsafeRaw } from '../../../../../utils/formatting/html.js';
10
+ /**
11
+ * Open Graph locale tag. The landing page body is English-only (the surrounding
12
+ * `<html lang="en">` matches), so a hardcoded `en_US` is accurate. Lift to a
13
+ * `landing.locale` config option if i18n is ever wired up.
14
+ */
15
+ const OG_LOCALE = 'en_US';
9
16
  export function renderHead(manifest, pageUrl) {
10
- const { server, landing } = manifest;
17
+ const { server, landing, framework } = manifest;
11
18
  const title = `${server.name} · MCP server`;
12
19
  const description = landing.tagline ?? server.description ?? `MCP server: ${server.name}`;
13
20
  const ogImage = landing.logo?.startsWith('http')
@@ -17,6 +24,13 @@ export function renderHead(manifest, pageUrl) {
17
24
  ? html `<link rel="icon" href="${landing.logo}" />`
18
25
  : html ``;
19
26
  const themeColor = html `<meta name="theme-color" content="${landing.theme.accent}" />`;
27
+ // Framework footprint marker (mirrors WordPress/Hugo/Jekyll/Gatsby's
28
+ // generator convention). Gated on landing.attribution so operators who
29
+ // opt out of the visible "Built on …" badge also opt out of the
30
+ // machine-readable footprint.
31
+ const generator = landing.attribution
32
+ ? html `<meta name="generator" content="${framework.name} ${framework.version}" />`
33
+ : html ``;
20
34
  const jsonLd = JSON.stringify({
21
35
  '@context': 'https://schema.org',
22
36
  '@type': 'SoftwareApplication',
@@ -31,10 +45,14 @@ export function renderHead(manifest, pageUrl) {
31
45
  <meta name="viewport" content="width=device-width, initial-scale=1" />
32
46
  <title>${title}</title>
33
47
  <meta name="description" content="${description}" />
48
+ ${generator}
49
+ <link rel="canonical" href="${pageUrl}" />
34
50
  ${themeColor}
35
51
  <meta property="og:title" content="${title}" />
36
52
  <meta property="og:description" content="${description}" />
37
53
  <meta property="og:type" content="website" />
54
+ <meta property="og:site_name" content="${server.name}" />
55
+ <meta property="og:locale" content="${OG_LOCALE}" />
38
56
  <meta property="og:url" content="${pageUrl}" />
39
57
  ${ogImage}
40
58
  <meta name="twitter:card" content="summary" />
@@ -1 +1 @@
1
- {"version":3,"file":"head.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/head.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,IAAI,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5E,MAAM,UAAU,UAAU,CAAC,QAAwB,EAAE,OAAe;IAClE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,IAAI,eAAe,CAAC;IAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,IAAI,eAAe,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1F,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAA,sCAAsC,OAAO,CAAC,IAAI,MAAM;QAC9D,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IACX,MAAM,OAAO,GACX,OAAO,CAAC,IAAI,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAA,0BAA0B,OAAO,CAAC,IAAI,MAAM;QAClD,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IACb,MAAM,UAAU,GAAG,IAAI,CAAA,qCAAqC,OAAO,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC;IAEvF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5B,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,qBAAqB;QAC9B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW;QACX,mBAAmB,EAAE,sBAAsB;QAC3C,eAAe,EAAE,MAAM,CAAC,OAAO;QAC/B,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;KACjD,CAAC,CAAC;IAEH,OAAO,IAAI,CAAA;;;aAGA,KAAK;wCACsB,WAAW;MAC7C,UAAU;yCACyB,KAAK;+CACC,WAAW;;uCAEnB,OAAO;MACxC,OAAO;;0CAE6B,KAAK;gDACC,WAAW;MACrD,OAAO;qCACwB,QAAQ,CAAC,SAAS,CAAC,YAAY;;yCAE3B,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;GACrE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,wEAAwE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"head.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/head.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,IAAI,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5E;;;;GAIG;AACH,MAAM,SAAS,GAAG,OAAO,CAAC;AAE1B,MAAM,UAAU,UAAU,CAAC,QAAwB,EAAE,OAAe;IAClE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;IAChD,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,IAAI,eAAe,CAAC;IAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,IAAI,eAAe,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1F,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAA,sCAAsC,OAAO,CAAC,IAAI,MAAM;QAC9D,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IACX,MAAM,OAAO,GACX,OAAO,CAAC,IAAI,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAA,0BAA0B,OAAO,CAAC,IAAI,MAAM;QAClD,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IACb,MAAM,UAAU,GAAG,IAAI,CAAA,qCAAqC,OAAO,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC;IACvF,qEAAqE;IACrE,uEAAuE;IACvE,gEAAgE;IAChE,8BAA8B;IAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW;QACnC,CAAC,CAAC,IAAI,CAAA,mCAAmC,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,MAAM;QAClF,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IAEX,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5B,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,qBAAqB;QAC9B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW;QACX,mBAAmB,EAAE,sBAAsB;QAC3C,eAAe,EAAE,MAAM,CAAC,OAAO;QAC/B,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;KACjD,CAAC,CAAC;IAEH,OAAO,IAAI,CAAA;;;aAGA,KAAK;wCACsB,WAAW;MAC7C,SAAS;kCACmB,OAAO;MACnC,UAAU;yCACyB,KAAK;+CACC,WAAW;;6CAEb,MAAM,CAAC,IAAI;0CACd,SAAS;uCACZ,OAAO;MACxC,OAAO;;0CAE6B,KAAK;gDACC,WAAW;MACrD,OAAO;qCACwB,QAAQ,CAAC,SAAS,CAAC,YAAY;;yCAE3B,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;GACrE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,wEAAwE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC"}
@@ -38,10 +38,10 @@ function renderPromptCard(prompt) {
38
38
  <article class="card" id="${anchor}">
39
39
  <div class="card-head">
40
40
  <h3 class="card-title"><a href="#${anchor}">${prompt.name}</a></h3>
41
- ${source}
42
41
  </div>
43
42
  <p class="card-desc">${prompt.description}</p>
44
43
  ${argsList}
44
+ ${source ? html `<footer class="card-foot">${source}</footer>` : html ``}
45
45
  </article>
46
46
  `;
47
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,IAAI,EAAiB,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,UAAU,oBAAoB,CAAC,OAAyB;IAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA,EAAE,CAAC;IACxC,OAAO,IAAI,CAAA;;QAEL,oBAAoB,CAAC,iBAAiB,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;+BAC3C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;;GAEzD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAsB;IAC9C,MAAM,MAAM,GAAG,UAAU,MAAM,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS;QAC7B,CAAC,CAAC,IAAI,CAAA,gCAAgC,MAAM,CAAC,SAAS,oCAAoC;QAC1F,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IAEX,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,IAAI,CAAA;;YAEA,MAAM,CAAC,IAAI,CAAC,GAAG,CACf,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAA;;wBAED,GAAG,CAAC,IAAI,UACd,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA,6CAA6C,CAAC,CAAC,CAAC,IAAI,CAAA,EACzE;kBACE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAA,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA,EAAE;;aAE3D,CACF;;OAEJ;QACD,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IAEb,OAAO,IAAI,CAAA;gCACmB,MAAM;;2CAEK,MAAM,KAAK,MAAM,CAAC,IAAI;UACvD,MAAM;;6BAEa,MAAM,CAAC,WAAW;QACvC,QAAQ;;GAEb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,IAAI,EAAiB,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,UAAU,oBAAoB,CAAC,OAAyB;IAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA,EAAE,CAAC;IACxC,OAAO,IAAI,CAAA;;QAEL,oBAAoB,CAAC,iBAAiB,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;+BAC3C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;;GAEzD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAsB;IAC9C,MAAM,MAAM,GAAG,UAAU,MAAM,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS;QAC7B,CAAC,CAAC,IAAI,CAAA,gCAAgC,MAAM,CAAC,SAAS,oCAAoC;QAC1F,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IAEX,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,IAAI,CAAA;;YAEA,MAAM,CAAC,IAAI,CAAC,GAAG,CACf,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAA;;wBAED,GAAG,CAAC,IAAI,UACd,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA,6CAA6C,CAAC,CAAC,CAAC,IAAI,CAAA,EACzE;kBACE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAA,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA,EAAE;;aAE3D,CACF;;OAEJ;QACD,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IAEb,OAAO,IAAI,CAAA;gCACmB,MAAM;;2CAEK,MAAM,KAAK,MAAM,CAAC,IAAI;;6BAEpC,MAAM,CAAC,WAAW;QACvC,QAAQ;QACR,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA,6BAA6B,MAAM,WAAW,CAAC,CAAC,CAAC,IAAI,CAAA,EAAE;;GAEzE,CAAC;AACJ,CAAC"}