44 < meta charset ="UTF-8 " />
55 < meta name ="viewport " content ="width=device-width, initial-scale=1.0 " />
66 < title > MCP Gateway Admin</ title >
7+ <!-- Favicon -->
8+ < link
9+ rel ="icon "
10+ type ="image/png "
11+ sizes ="32x32 "
12+ href ="{{ root_path }}/static/favicon.ico "
13+ />
714 < link
815 href ="https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css "
916 rel ="stylesheet "
2532
2633 < body class ="bg-gray-100 ">
2734 < div class ="w-full max-w-screen-2xl mx-auto px-4 py-8 ">
28- < header class ="mb-8 ">
29- < h1 class ="text-3xl font-bold text-gray-800 ">
30- MCP Context Forge - Gateway Administration
31- </ h1 >
32- < p class ="text-gray-600 ">
33- Manage tools, resources, prompts, servers, and federated gateways
34- </ p >
35- </ header >
35+ < header class ="mb-8 ">
36+ < h1 class ="text-3xl font-bold text-gray-800 ">
37+ MCP Context Forge – Gateway Administration
38+ </ h1 >
39+
40+ < p class ="text-gray-600 ">
41+ Manage tools, resources, prompts, servers, and federated gateways
42+ (remote MCP servers)
43+ < span class ="mx-2 text-gray-400 "> |</ span >
44+ < a
45+ href ="https://ibm.github.io/mcp-context-forge/ "
46+ target ="_blank "
47+ class ="text-indigo-600 hover:underline "
48+ > Docs</ a
49+ >
50+ < span class ="mx-2 text-gray-400 "> |</ span >
51+ < a
52+ href ="https://github.com/IBM/mcp-context-forge "
53+ target ="_blank "
54+ class ="text-indigo-600 hover:underline "
55+ > ⭐ Star mcp-context-forge on GitHub</ a
56+ >
57+ </ p >
58+ </ header >
59+
60+
3661
3762 <!-- Tabs -->
3863 < div class ="mb-8 ">
@@ -43,35 +68,35 @@ <h1 class="text-3xl font-bold text-gray-800">
4368 id ="tab-catalog "
4469 class ="tab-link border-indigo-500 text-indigo-600 whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm "
4570 >
46- Servers Catalog
71+ Virtual Servers Catalog
4772 </ a >
4873 < a
4974 href ="#tools "
5075 id ="tab-tools "
5176 class ="tab-link border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm "
5277 >
53- Tools
78+ Global Tools
5479 </ a >
5580 < a
5681 href ="#resources "
5782 id ="tab-resources "
5883 class ="tab-link border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm "
5984 >
60- Resources
85+ Global Resources
6186 </ a >
6287 < a
6388 href ="#prompts "
6489 id ="tab-prompts "
6590 class ="tab-link border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm "
6691 >
67- Prompts
92+ Global Prompts
6893 </ a >
6994 < a
7095 href ="#gateways "
7196 id ="tab-gateways "
7297 class ="tab-link border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm "
7398 >
74- Gateways
99+ Gateways/MCP Servers
75100 </ a >
76101 < a
77102 href ="#roots "
@@ -87,6 +112,14 @@ <h1 class="text-3xl font-bold text-gray-800">
87112 >
88113 Metrics
89114 </ a >
115+ <!-- New Version tab (opens separate /version page) -->
116+ < a
117+ href ="{{ root_path }}/version "
118+ target ="_blank "
119+ class ="border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm "
120+ >
121+ Version
122+ </ a >
90123 </ nav >
91124 </ div >
92125 </ div >
@@ -95,6 +128,8 @@ <h1 class="text-3xl font-bold text-gray-800">
95128 < div id ="catalog-panel " class ="tab-panel ">
96129 < div class ="flex justify-between items-center mb-4 ">
97130 < h2 class ="text-2xl font-bold "> MCP Servers Catalog</ h2 >
131+ < p class ="text-sm text-gray-600 mt-1 "> Virtual Servers let you combine Tools, Resources, and Prompts from the global Tools catalog into a reusable configuration.</ p >
132+
98133 < div class ="flex items-center ">
99134 < input
100135 type ="checkbox "
@@ -356,6 +391,7 @@ <h3 class="text-lg font-bold mb-4">Add New Server</h3>
356391 < div id ="tools-panel " class ="tab-panel hidden ">
357392 < div class ="flex justify-between items-center mb-4 ">
358393 < h2 class ="text-2xl font-bold "> Registered Tools</ h2 >
394+ < p class ="text-sm text-gray-600 mt-1 "> This is the global catalog of Tools available. Create a Virtual Server using one of these tools.</ p >
359395 < div class ="flex items-center ">
360396 < input
361397 type ="checkbox "
@@ -737,6 +773,7 @@ <h3 class="text-lg font-bold mb-4">Add New Tool</h3>
737773 < div id ="resources-panel " class ="tab-panel hidden ">
738774 < div class ="flex justify-between items-center mb-4 ">
739775 < h2 class ="text-2xl font-bold "> Available Resources</ h2 >
776+ < p class ="text-sm text-gray-600 mt-1 "> Resources are reusable data assets—like text, code, or media—that Tools and Prompts can reference by URI.</ p >
740777 < div class ="flex items-center ">
741778 < input
742779 type ="checkbox "
@@ -967,6 +1004,7 @@ <h3 class="text-lg font-bold mb-4">Add New Resource</h3>
9671004 < div id ="prompts-panel " class ="tab-panel hidden ">
9681005 < div class ="flex justify-between items-center mb-4 ">
9691006 < h2 class ="text-2xl font-bold "> Available Prompts</ h2 >
1007+ < p class ="text-sm text-gray-600 mt-1 "> Prompts define reusable message templates with parameters, useful for driving LLM interactions or Tool input.</ p >
9701008 < div class ="flex items-center ">
9711009 < input
9721010 type ="checkbox "
@@ -1173,7 +1211,8 @@ <h3 class="text-lg font-bold mb-4">Add New Prompt</h3>
11731211 <!-- Gateways Panel -->
11741212 < div id ="gateways-panel " class ="tab-panel hidden ">
11751213 < div class ="flex justify-between items-center mb-4 ">
1176- < h2 class ="text-2xl font-bold "> Federated Gateways</ h2 >
1214+ < h2 class ="text-2xl font-bold "> Federated Gateways (MCP)</ h2 >
1215+ < p class ="text-sm text-gray-600 mt-1 "> Gateways are where you register external MCP servers to federate their tools/resources/prompts into your environment.</ p >
11771216 < div class ="flex items-center ">
11781217 < input
11791218 type ="checkbox "
@@ -1440,45 +1479,59 @@ <h3 class="text-lg font-bold mb-4">Add New Gateway</h3>
14401479
14411480 <!-- Roots Panel -->
14421481 < div id ="roots-panel " class ="tab-panel hidden ">
1482+ <!-- List of roots ------------------------------------------------------->
14431483 < div class ="bg-white shadow rounded-lg p-6 mb-8 ">
1444- < h2 class ="text-2xl font-bold mb-4 "> Root Directories</ h2 >
1484+ <!-- Consistent header -->
1485+ < div class ="flex justify-between items-center mb-4 ">
1486+ < h2 class ="text-2xl font-bold "> Root Directories</ h2 >
1487+ < div class ="flex items-center ">
1488+ < input
1489+ type ="checkbox "
1490+ id ="show-inactive-roots "
1491+ class ="mr-2 "
1492+ onchange ="toggleInactiveItems('roots') "
1493+ />
1494+ < label
1495+ for ="show-inactive-roots "
1496+ class ="text-sm font-medium text-gray-700 "
1497+ >
1498+ Show Inactive
1499+ </ label >
1500+ </ div >
1501+ </ div >
1502+
1503+ <!-- Description -->
1504+ < p class ="text-sm text-gray-600 mb-4 ">
1505+ Roots define the base folders accessible for file-based Resources.
1506+ They enable MCP servers to browse local content.
1507+ </ p >
1508+
1509+ <!-- Roots table -->
14451510 < div class ="overflow-x-auto ">
14461511 < table class ="min-w-full divide-y divide-gray-200 ">
14471512 < thead class ="bg-gray-50 ">
14481513 < tr >
1449- < th
1450- class ="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider "
1451- >
1514+ < th class ="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider ">
14521515 ID
14531516 </ th >
1454- < th
1455- class ="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider "
1456- >
1517+ < th class ="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider ">
14571518 URI
14581519 </ th >
1459- < th
1460- class ="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider "
1461- >
1520+ < th class ="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider ">
14621521 Name
14631522 </ th >
1464- < th
1465- class ="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider "
1466- >
1523+ < th class ="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider ">
14671524 Actions
14681525 </ th >
14691526 </ tr >
14701527 </ thead >
14711528 < tbody class ="bg-white divide-y divide-gray-200 ">
14721529 {% for root in roots %}
14731530 < tr >
1474- < td
1475- class ="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 "
1476- >
1531+ < td class ="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 ">
14771532 {{ root.id }}
14781533 </ td >
1479- < td
1480- class ="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 "
1481- >
1534+ < td class ="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 ">
14821535 {{ root.uri }}
14831536 </ td >
14841537 < td class ="px-6 py-4 whitespace-nowrap text-sm text-gray-500 ">
@@ -1491,10 +1544,7 @@ <h2 class="text-2xl font-bold mb-4">Root Directories</h2>
14911544 class ="inline "
14921545 onsubmit ="return confirm('Are you sure you want to delete this root?'); "
14931546 >
1494- < button
1495- type ="submit "
1496- class ="text-red-600 hover:text-red-900 "
1497- >
1547+ < button type ="submit " class ="text-red-600 hover:text-red-900 ">
14981548 Delete
14991549 </ button >
15001550 </ form >
@@ -1506,14 +1556,13 @@ <h2 class="text-2xl font-bold mb-4">Root Directories</h2>
15061556 </ div >
15071557 </ div >
15081558
1559+ <!-- Add new root -------------------------------------------------------->
15091560 < div class ="bg-white shadow rounded-lg p-6 ">
15101561 < h3 class ="text-lg font-bold mb-4 "> Add New Root</ h3 >
15111562 < form method ="POST " action ="{{ root_path }}/admin/roots " id ="add-root-form ">
15121563 < div class ="grid grid-cols-1 gap-6 ">
15131564 < div >
1514- < label class ="block text-sm font-medium text-gray-700 "
1515- > URI</ label
1516- >
1565+ < label class ="block text-sm font-medium text-gray-700 "> URI</ label >
15171566 < input
15181567 type ="text "
15191568 name ="uri "
@@ -1523,9 +1572,7 @@ <h3 class="text-lg font-bold mb-4">Add New Root</h3>
15231572 />
15241573 </ div >
15251574 < div >
1526- < label class ="block text-sm font-medium text-gray-700 "
1527- > Name</ label
1528- >
1575+ < label class ="block text-sm font-medium text-gray-700 "> Name</ label >
15291576 < input
15301577 type ="text "
15311578 name ="name "
@@ -1545,12 +1592,14 @@ <h3 class="text-lg font-bold mb-4">Add New Root</h3>
15451592 </ form >
15461593 </ div >
15471594 </ div >
1548- </ div >
1595+
1596+
15491597
15501598 <!-- Metrics Panel -->
15511599 < div id ="metrics-panel " class ="tab-panel hidden ">
15521600 < div class ="bg-white shadow rounded-lg p-6 ">
15531601 < h2 class ="text-2xl font-bold mb-4 "> Aggregated Metrics</ h2 >
1602+ < p class ="text-sm text-gray-600 mt-1 "> Metrics provide visibility into Tool, Resource, Prompt, and Server usage across your Gateway—helpful for debugging and optimization.</ p >
15541603
15551604 <!-- Refresh button (also auto-refreshes when the tab is selected) -->
15561605 < button
@@ -1599,6 +1648,7 @@ <h2 class="text-2xl font-bold mb-4">Aggregated Metrics</h2>
15991648 </ div >
16001649 </ div >
16011650
1651+
16021652 <!-- Modals -->
16031653 <!-- Tool Detail Modal -->
16041654 < div id ="tool-modal " class ="fixed z-10 inset-0 overflow-y-auto hidden ">
0 commit comments