🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@cybertheory/mcpkit

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@cybertheory/mcpkit - npm Package Compare versions

Comparing version
0.1.4
to
0.2.0
+1
web/dist/assets/index-Bvzz2C6A.css
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-4{bottom:1rem}.left-0{left:0}.left-3{left:.75rem}.left-4{left:1rem}.right-0{right:0}.top-0{top:0}.top-2\.5{top:.625rem}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-12{height:3rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-full{height:100%}.max-h-\[90vh\]{max-height:90vh}.min-h-screen{min-height:100vh}.w-12{width:3rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.grid-cols-\[260px_1fr\]{grid-template-columns:260px 1fr}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-r{border-right-width:1px}.border-amber-400\/20{border-color:#fbbf2433}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-blue-400\/20{border-color:#60a5fa33}.border-green-400\/20{border-color:#4ade8033}.border-indigo-400{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-slate-400{--tw-border-opacity: 1;border-color:rgb(148 163 184 / var(--tw-border-opacity, 1))}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.bg-amber-400\/10{background-color:#fbbf241a}.bg-black\/50{background-color:#00000080}.bg-blue-400\/10{background-color:#60a5fa1a}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-green-400\/10{background-color:#4ade801a}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-indigo-950\/40{background-color:#1e1b4b66}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-yellow-600{--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity, 1))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-slate-800{--tw-gradient-from: #1e293b var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 41 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-950\/80{--tw-gradient-from: rgb(2 6 23 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-slate-700{--tw-gradient-to: #334155 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-9{padding-left:2.25rem}.pr-3{padding-right:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-slate-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.placeholder-slate-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}:root{color-scheme:dark}body{margin:0}.news-ticker{margin-bottom:.5rem;overflow:hidden;border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1));padding:.5rem;position:relative}.news-ticker-content{display:flex;align-items:center;animation:scroll-left 30s linear infinite;white-space:nowrap}.news-ticker-content:hover{animation-play-state:paused}.news-item{margin-right:2rem;flex-shrink:0;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.news-item:hover{--tw-text-opacity: 1;color:rgb(254 240 138 / var(--tw-text-opacity, 1))}.news-item{text-decoration:none;font-size:14px}.news-item:hover{text-decoration:underline}@keyframes scroll-left{0%{transform:translate(100%)}to{transform:translate(-100%)}}@media (max-width: 768px){.news-ticker-content{animation-duration:20s}.news-item{font-size:13px;margin-right:6px}}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-yellow-700:hover{--tw-bg-opacity: 1;background-color:rgb(161 98 7 / var(--tw-bg-opacity, 1))}.hover\:text-blue-300:hover{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}@media (min-width: 640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}

Sorry, the diff of this file is too big to display

+383
-16

@@ -165,2 +165,141 @@ #!/usr/bin/env node

function resolveClaudeDesktopMcpConfig() {
// Claude Desktop stores MCP config in various locations
const candidates = [];
const homeDir = os.homedir();
// Use environment variables for user-agnostic paths
if (process.platform === 'win32') {
const appData = process.env.APPDATA || path.join(homeDir, 'AppData', 'Roaming');
candidates.push(path.join(appData, 'Anthropic', 'Claude', 'mcp.json'));
candidates.push(path.join(appData, 'Claude', 'mcp.json'));
candidates.push(path.join(appData, 'Claude', 'config.json'));
candidates.push(path.join(appData, 'Claude', 'settings.json'));
} else if (process.platform === 'darwin') {
candidates.push(path.join(homeDir, 'Library', 'Application Support', 'Claude', 'mcp.json'));
candidates.push(path.join(homeDir, 'Library', 'Application Support', 'Anthropic', 'Claude', 'mcp.json'));
} else {
// Linux
candidates.push(path.join(homeDir, '.claude', 'mcp.json'));
candidates.push(path.join(homeDir, '.anthropic', 'claude', 'mcp.json'));
candidates.push(path.join(homeDir, '.config', 'claude', 'mcp.json'));
}
for (const p of candidates) {
if (fs.existsSync(p)) return p;
}
return null;
}
function resolveContinueMcpConfig() {
// Continue stores MCP config in ~/.continue/config.json
const candidates = [];
const homeDir = os.homedir();
candidates.push(path.join(homeDir, '.continue', 'config.json'));
candidates.push(path.join(homeDir, '.continue', 'mcp.json'));
for (const p of candidates) {
if (fs.existsSync(p)) return p;
}
return null;
}
function resolveAiderMcpConfig() {
// Aider stores config in ~/.aiderrc or ~/.aider/config.json
const candidates = [];
const homeDir = os.homedir();
candidates.push(path.join(homeDir, '.aiderrc'));
candidates.push(path.join(homeDir, '.aider', 'config.json'));
candidates.push(path.join(homeDir, '.aider', 'mcp.json'));
for (const p of candidates) {
if (fs.existsSync(p)) return p;
}
return null;
}
function resolveClineMcpConfig() {
// Cline stores MCP config in dedicated config file, NOT VS Code settings
const candidates = [];
const homeDir = os.homedir();
// Dedicated Cline config locations
candidates.push(path.join(homeDir, '.cline', 'config.json'));
candidates.push(path.join(homeDir, '.cline', 'mcp.json'));
candidates.push(path.join(homeDir, '.cline', 'settings.json'));
for (const p of candidates) {
if (fs.existsSync(p)) return p;
}
return null;
}
// VS Code is not an MCP-enabled AI agent, so we don't need this function
// MCP support in VS Code comes through extensions like Cline
function resolveGenericMcpConfig(platformName) {
// Generic MCP config resolver for other platforms
const candidates = [];
const homeDir = os.homedir();
// Common patterns
candidates.push(path.join(homeDir, `.${platformName.toLowerCase()}`, 'mcp.json'));
candidates.push(path.join(homeDir, `.${platformName.toLowerCase()}`, 'config.json'));
candidates.push(path.join(homeDir, `.${platformName.toLowerCase()}rc`));
for (const p of candidates) {
if (fs.existsSync(p)) return p;
}
return null;
}
function isApplicationInstalled(appName) {
// Check if application is actually installed by looking for executable or installation directories
const homeDir = os.homedir();
if (process.platform === 'win32') {
// Windows: Use environment variables for user-agnostic paths
const localAppData = process.env.LOCALAPPDATA || path.join(homeDir, 'AppData', 'Local');
const appData = process.env.APPDATA || path.join(homeDir, 'AppData', 'Roaming');
const programFiles = process.env.PROGRAMFILES || 'C:\\Program Files';
const programFilesX86 = process.env['PROGRAMFILES(X86)'] || 'C:\\Program Files (x86)';
const winPaths = [
path.join(localAppData, 'Programs', appName),
path.join(localAppData, 'Programs', `Microsoft ${appName}`), // VS Code
path.join(appData, appName),
path.join(appData, 'Anthropic'), // Claude Desktop
path.join(appData, 'Claude'), // Claude Desktop alternative
path.join(programFiles, appName),
path.join(programFiles, `Microsoft ${appName}`),
path.join(programFilesX86, appName),
path.join(programFilesX86, `Microsoft ${appName}`)
];
return winPaths.some(p => fs.existsSync(p));
} else if (process.platform === 'darwin') {
// macOS: Check Applications folder and user directories
const macPaths = [
path.join('/Applications', `${appName}.app`),
path.join('/Applications', `Microsoft ${appName}.app`),
path.join(homeDir, 'Applications', `${appName}.app`),
path.join(homeDir, 'Applications', `Microsoft ${appName}.app`),
path.join(homeDir, `.${appName.toLowerCase()}`)
];
return macPaths.some(p => fs.existsSync(p));
} else {
// Linux: Check common installation paths
const linuxPaths = [
path.join('/usr/bin', appName.toLowerCase()),
path.join('/usr/local/bin', appName.toLowerCase()),
path.join(homeDir, `.${appName.toLowerCase()}`)
];
return linuxPaths.some(p => fs.existsSync(p));
}
}
function detectAgents() {

@@ -177,3 +316,4 @@ const agents = [];

mcpConfigPath: cursorMcpConfig,
type: 'mcp-config'
type: 'mcp-config',
category: 'Code Editors'
});

@@ -189,6 +329,78 @@ }

mcpConfigPath: windsurfMcpConfig,
type: 'mcp-config'
type: 'mcp-config',
category: 'Code Editors'
});
}
// Check for Claude Desktop MCP config - also verify it's actually installed
const claudeMcpConfig = resolveClaudeDesktopMcpConfig();
if (claudeMcpConfig && (isApplicationInstalled('Claude') || isApplicationInstalled('Anthropic'))) {
agents.push({
id: 'claude-desktop',
name: 'Claude Desktop',
mcpConfigPath: claudeMcpConfig,
type: 'mcp-config',
category: 'AI Assistants'
});
}
// Check for Continue MCP config
const continueMcpConfig = resolveContinueMcpConfig();
if (continueMcpConfig) {
agents.push({
id: 'continue',
name: 'Continue',
mcpConfigPath: continueMcpConfig,
type: 'mcp-config',
category: 'Code Editors'
});
}
// Check for Aider MCP config
const aiderMcpConfig = resolveAiderMcpConfig();
if (aiderMcpConfig) {
agents.push({
id: 'aider',
name: 'Aider',
mcpConfigPath: aiderMcpConfig,
type: 'mcp-config',
category: 'Terminal Tools'
});
}
// Check for Cline MCP config - only if Cline is actually installed
const clineMcpConfig = resolveClineMcpConfig();
if (clineMcpConfig && isApplicationInstalled('Cline')) {
agents.push({
id: 'cline',
name: 'Cline',
mcpConfigPath: clineMcpConfig,
type: 'mcp-config',
category: 'Code Editors'
});
}
// VS Code is not an MCP-enabled AI agent - it's just an editor
// MCP support comes through extensions like Cline, not VS Code itself
// Check for other common platforms
const otherPlatforms = [
{ id: 'neovim', name: 'Neovim', category: 'Code Editors' },
{ id: 'emacs', name: 'Emacs', category: 'Code Editors' },
{ id: 'jetbrains', name: 'JetBrains IDEs', category: 'Code Editors' }
];
otherPlatforms.forEach(platform => {
const configPath = resolveGenericMcpConfig(platform.id);
if (configPath && isApplicationInstalled(platform.name)) {
agents.push({
id: platform.id,
name: platform.name,
mcpConfigPath: configPath,
type: 'mcp-config',
category: platform.category
});
}
});
// Load persisted manually added agents

@@ -361,11 +573,51 @@ const persistedAgents = loadPersistedAgents();

function ensureMcpServersInConfig(config) {
// Cursor MCP config format: { mcpServers: { serverId: { command, args } } }
if (!config || typeof config !== 'object') return { mcpServers: {} };
if (!config.mcpServers || typeof config.mcpServers !== 'object') config.mcpServers = {};
function ensureMcpServersInConfig(config, agentId) {
// Different platforms use different config formats
if (!config || typeof config !== 'object') {
// Default to Cursor format
return { mcpServers: {} };
}
// Cursor/Windsurf format: { mcpServers: { serverId: { command, args } } }
if (agentId === 'cursor' || agentId === 'windsurf') {
if (!config.mcpServers || typeof config.mcpServers !== 'object') config.mcpServers = {};
return config;
}
// Claude Desktop format: { mcpServers: { serverId: { command, args } } }
if (agentId === 'claude-desktop') {
if (!config.mcpServers || typeof config.mcpServers !== 'object') config.mcpServers = {};
return config;
}
// Continue format: { mcpServers: { serverId: { command, args } } }
if (agentId === 'continue') {
if (!config.mcpServers || typeof config.mcpServers !== 'object') config.mcpServers = {};
return config;
}
// Aider format: { mcpServers: { serverId: { command, args } } }
if (agentId === 'aider') {
if (!config.mcpServers || typeof config.mcpServers !== 'object') config.mcpServers = {};
return config;
}
// Cline format: VS Code settings with mcpServers
if (agentId === 'cline') {
if (!config.mcpServers || typeof config.mcpServers !== 'object') config.mcpServers = {};
return config;
}
// Generic format - try to detect
if (config.mcpServers) {
return config;
}
// Fallback to Cursor format
config.mcpServers = {};
return config;
}
function addServerToMcpConfig(mcpConfigPath, serverId, serverCommand, env = {}) {
const config = ensureMcpServersInConfig(readJson(mcpConfigPath));
function addServerToMcpConfig(mcpConfigPath, serverId, serverCommand, env = {}, agentId = 'cursor') {
const config = ensureMcpServersInConfig(readJson(mcpConfigPath), agentId);

@@ -386,2 +638,13 @@ // Parse command and args from the install command

function removeServerFromMcpConfig(mcpConfigPath, serverId, agentId = 'cursor') {
const config = ensureMcpServersInConfig(readJson(mcpConfigPath), agentId);
if (config.mcpServers && config.mcpServers[serverId]) {
delete config.mcpServers[serverId];
writeJsonSafe(mcpConfigPath, config);
return true;
}
return false;
}
async function main() {

@@ -397,2 +660,108 @@ const app = express();

// News API endpoint for tech headlines - using free proxy
app.get('/api/news', async (req, res) => {
try {
// Use Saurav.tech NewsAPI proxy - completely free, no API key required
const FREE_NEWS_API_URL = 'https://saurav.tech/NewsAPI/top-headlines/category/technology/us.json';
console.log('Fetching tech news from free API...');
// Fetch tech news from free proxy
const response = await fetch(FREE_NEWS_API_URL);
if (!response.ok) {
throw new Error(`Free News API error: ${response.status} ${response.statusText}`);
}
const data = await response.json();
// Filter and format articles for tech relevance
const articles = (data.articles || [])
.filter(article => {
// Additional filtering for tech relevance
const title = article.title?.toLowerCase() || '';
const description = article.description?.toLowerCase() || '';
const content = `${title} ${description}`;
// Comprehensive tech-related keywords
const techKeywords = [
'ai', 'artificial intelligence', 'mcp', 'model context protocol', 'claude', 'anthropic',
'coding assistant', 'developer tool', 'programming', 'software', 'technology', 'tech',
'startup', 'innovation', 'digital', 'cloud', 'cybersecurity', 'data science',
'blockchain', 'cryptocurrency', 'web development', 'mobile development', 'devops',
'api', 'microservices', 'javascript', 'python', 'react', 'node.js', 'typescript',
'java', 'c++', 'go', 'rust', 'swift', 'kotlin', 'php', 'ruby', 'c#', 'dart',
'microsoft', 'google', 'apple', 'amazon', 'meta', 'tesla', 'spacex', 'github',
'gitlab', 'docker', 'kubernetes', 'aws', 'azure', 'gcp', 'developer', 'engineer',
'programmer', 'computer science', 'software engineering', 'tech company', 'tech industry',
'tech news', 'tech trends', 'emerging technology', 'tech innovation', 'tech breakthrough',
'tech advancement', 'tech evolution', 'future of technology', 'next generation technology',
'cutting edge technology', 'revolutionary technology', 'disruptive technology',
'emerging tech', 'tech disruption', 'tech revolution', 'digital revolution',
'tech transformation', 'tech modernization', 'tech platform', 'tech infrastructure',
'tech architecture', 'tech framework', 'tech ecosystem', 'tech solution', 'tech tool',
'tech application', 'tech software', 'tech hardware', 'tech device', 'tech gadget',
'tech equipment', 'tech system', 'tech network', 'tech database', 'tech server',
'tech cloud', 'tech storage', 'tech security', 'tech privacy', 'tech compliance',
'tech regulation', 'tech policy', 'tech governance', 'tech management', 'tech leadership',
'tech strategy', 'tech planning', 'tech execution', 'tech implementation', 'tech delivery',
'tech support', 'tech maintenance', 'tech monitoring', 'tech analytics', 'tech metrics',
'tech performance', 'tech optimization', 'tech efficiency', 'tech productivity',
'tech automation', 'tech integration', 'tech deployment', 'tech adoption', 'tech utilization',
'tech scalability', 'tech reliability', 'tech availability', 'tech conference',
'tech event', 'tech summit', 'tech expo', 'ces', 'wwdc', 'google i/o', 'microsoft build',
'aws re:invent', 'techcrunch', 'venture capital', 'tech funding', 'tech investment',
'tech acquisition', 'tech merger', 'tech partnership', 'tech collaboration'
];
return techKeywords.some(keyword => content.includes(keyword));
})
.map(article => ({
title: article.title,
url: article.url,
publishedAt: article.publishedAt,
source: article.source
}))
.slice(0, 8); // Limit to 8 articles
console.log(`Found ${articles.length} tech articles`);
res.json({ articles });
} catch (error) {
console.error('Error fetching news:', error);
res.status(500).json({
error: 'Failed to fetch news',
message: 'Free news service temporarily unavailable. Please try again later.'
});
}
});
// Debug endpoint to help troubleshoot detection
app.get('/api/debug-detection', (req, res) => {
const homeDir = os.homedir();
const debug = {
platform: process.platform,
homeDir: homeDir,
claudePaths: [
path.join(homeDir, '.claude', 'mcp.json'),
path.join(homeDir, '.anthropic', 'claude', 'mcp.json'),
path.join(homeDir, 'AppData', 'Roaming', 'Anthropic', 'Claude', 'mcp.json'),
path.join(homeDir, 'AppData', 'Roaming', 'Claude', 'mcp.json'),
path.join(homeDir, 'AppData', 'Roaming', 'Claude', 'config.json'),
path.join(homeDir, 'AppData', 'Roaming', 'Claude', 'settings.json')
],
claudeExists: [
fs.existsSync(path.join(homeDir, '.claude', 'mcp.json')),
fs.existsSync(path.join(homeDir, '.anthropic', 'claude', 'mcp.json')),
fs.existsSync(path.join(homeDir, 'AppData', 'Roaming', 'Anthropic', 'Claude', 'mcp.json')),
fs.existsSync(path.join(homeDir, 'AppData', 'Roaming', 'Claude', 'mcp.json')),
fs.existsSync(path.join(homeDir, 'AppData', 'Roaming', 'Claude', 'config.json')),
fs.existsSync(path.join(homeDir, 'AppData', 'Roaming', 'Claude', 'settings.json'))
],
claudeInstalled: isApplicationInstalled('Claude'),
claudeConfig: resolveClaudeDesktopMcpConfig()
};
res.json(debug);
});
// Allow manual override of MCP config path when detection fails

@@ -470,3 +839,3 @@ app.post('/api/set-mcp-config-path', (req, res) => {

try {
addServerToMcpConfig(agent.mcpConfigPath, mcp.id, mcp.command, envVars || {});
addServerToMcpConfig(agent.mcpConfigPath, mcp.id, mcp.command, envVars || {}, agentId);
updateMcpInstallationStatus(mcpId, agentId, true);

@@ -492,7 +861,5 @@ track('mcp_installed', { agentId, mcpId, source: 'registry' });

// Remove from MCP config
const config = readJson(agent.mcpConfigPath);
if (config.mcpServers && config.mcpServers[mcpId]) {
delete config.mcpServers[mcpId];
writeJsonSafe(agent.mcpConfigPath, config);
const removed = removeServerFromMcpConfig(agent.mcpConfigPath, mcpId, agentId);
if (removed) {
// Update registry

@@ -555,3 +922,3 @@ updateMcpInstallationStatus(mcpId, agentId, false);

const config = readJson(agent.mcpConfigPath);
const config = ensureMcpServersInConfig(readJson(agent.mcpConfigPath), agentId);
const isInstalled = config.mcpServers && config.mcpServers[mcpId];

@@ -762,3 +1129,3 @@

const config = readJson(agent.mcpConfigPath);
const config = ensureMcpServersInConfig(readJson(agent.mcpConfigPath), agentId);
const mcpConfig = config.mcpServers?.[mcpId];

@@ -765,0 +1132,0 @@

@@ -434,4 +434,220 @@ {

"installed_agents": []
},
{
"id": "npm-mcp",
"name": "NPM MCP",
"category": "Development",
"description": "Search the NPM registry and fetch package information",
"version": "latest",
"npm": "@mateusribeirocampos/npm-mcp-server",
"command": "npx @mateusribeirocampos/npm-mcp-server@latest",
"env": {},
"setup_instructions": [
"1. No additional setup required (public NPM registry access)",
"2. Ensure you have an internet connection",
"3. Use this server to search and retrieve package details"
],
"uninstall_steps": [
"Remove the MCP server entry from your mcp.json file",
"Restart your MCP client (Cursor/Windsurf)"
],
"documentation": "https://github.com/mateusribeirocampos/npm-mcp-server",
"installed": false,
"installation_date": null,
"installed_agents": []
},
{
"id": "mcp-directory-mcp",
"name": "MCP Directory MCP",
"category": "System",
"description": "Discover and browse available MCP servers via a directory service",
"version": "latest",
"npm": null,
"command": null,
"env": {},
"setup_instructions": [
"1. No credentials required for public directory queries",
"2. Optionally sign up on Smithery or other directories for advanced API access",
"3. Ensure internet access to fetch the server listings"
],
"uninstall_steps": [
"Remove the MCP server entry from your mcp.json file",
"Restart your MCP client (Cursor/Windsurf)"
],
"documentation": "https://smithery.ai/ (MCP servers registry)",
"installed": false,
"installation_date": null,
"installed_agents": []
},
{
"id": "gitlab-mcp",
"name": "GitLab MCP",
"category": "Development",
"description": "Manage GitLab repositories, issues, and CI pipelines",
"version": "latest",
"npm": "@modelcontextprotocol/server-gitlab",
"command": "npx @modelcontextprotocol/server-gitlab@latest",
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": {
"required": true,
"description": "GitLab Personal Access Token",
"placeholder": "glpat-xxxxxxxxxxxxxxxx",
"help": "Create a personal access token in GitLab with API scope"
},
"GITLAB_API_URL": {
"required": false,
"description": "GitLab API URL for self-hosted instances",
"placeholder": "https://gitlab.example.com/api/v4",
"help": "Specify if using self-managed GitLab (leave blank for gitlab.com)"
}
},
"setup_instructions": [
"1. Go to GitLab -> Settings -> Access Tokens",
"2. Create a new token with 'api' scope",
"3. Copy the generated token",
"4. Paste it in the configuration field",
"5. If using a self-hosted GitLab, provide the API base URL"
],
"uninstall_steps": [
"Remove the MCP server entry from your mcp.json file",
"Restart your MCP client (Cursor/Windsurf)"
],
"documentation": "https://github.com/modelcontextprotocol/servers/tree/main/src/gitlab",
"installed": false,
"installation_date": null,
"installed_agents": []
},
{
"id": "aws-mcp",
"name": "AWS MCP",
"category": "Cloud",
"description": "Interact with Amazon Web Services (AWS) resources",
"version": "latest",
"npm": "@modelcontextprotocol/server-aws",
"command": "npx @modelcontextprotocol/server-aws@latest",
"env": {
"AWS_ACCESS_KEY_ID": {
"required": true,
"description": "AWS Access Key ID",
"placeholder": "AKIAxxxxxxxxxxxxxxx",
"help": "Create via AWS IAM with programmatic access"
},
"AWS_SECRET_ACCESS_KEY": {
"required": true,
"description": "AWS Secret Access Key",
"placeholder": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"help": "Provided when creating an IAM access key"
},
"AWS_REGION": {
"required": false,
"description": "Default AWS region",
"placeholder": "us-east-1",
"help": "Set the AWS region for resource operations (optional)"
}
},
"setup_instructions": [
"1. Log in to the AWS IAM console",
"2. Create or use an IAM user with necessary permissions",
"3. Generate an Access Key and Secret Key for the user",
"4. Note the AWS region you want to operate in",
"5. Paste the credentials and region in the configuration fields"
],
"uninstall_steps": [
"Remove the MCP server entry from your mcp.json file",
"Restart your MCP client (Cursor/Windsurf)"
],
"documentation": "https://github.com/modelcontextprotocol/servers/tree/main/src/aws",
"installed": false,
"installation_date": null,
"installed_agents": []
},
{
"id": "gcp-mcp",
"name": "GCP MCP",
"category": "Cloud",
"description": "Manage Google Cloud Platform resources and services",
"version": "latest",
"npm": "@modelcontextprotocol/server-gcp",
"command": "npx @modelcontextprotocol/server-gcp@latest",
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": {
"required": true,
"description": "Path to Google Cloud service account JSON key",
"placeholder": "/path/to/service-account.json",
"help": "Download a service account JSON key from Google Cloud Console"
},
"GCP_PROJECT_ID": {
"required": true,
"description": "Google Cloud Project ID",
"placeholder": "my-google-project",
"help": "Your GCP project identifier (found in the Cloud Console)"
}
},
"setup_instructions": [
"1. Go to Google Cloud Console and enable relevant APIs",
"2. Create a service account with needed roles",
"3. Download the service account JSON key file",
"4. Save the key file path and set it in the configuration",
"5. Enter your Google Cloud Project ID"
],
"uninstall_steps": [
"Remove the MCP server entry from your mcp.json file",
"Restart your MCP client (Cursor/Windsurf)"
],
"documentation": "https://github.com/modelcontextprotocol/servers/tree/main/src/gcp",
"installed": false,
"installation_date": null,
"installed_agents": []
},
{
"id": "azure-mcp",
"name": "Azure MCP",
"category": "Cloud",
"description": "Control Microsoft Azure services and resources",
"version": "latest",
"npm": "@modelcontextprotocol/server-azure",
"command": "npx @modelcontextprotocol/server-azure@latest",
"env": {
"AZURE_SUBSCRIPTION_ID": {
"required": true,
"description": "Azure Subscription ID",
"placeholder": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"help": "Find your Subscription ID in the Azure Portal"
},
"AZURE_TENANT_ID": {
"required": true,
"description": "Azure Tenant ID (Directory ID)",
"placeholder": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"help": "Find your Tenant ID in Azure Active Directory properties"
},
"AZURE_CLIENT_ID": {
"required": true,
"description": "Azure Client ID (App ID)",
"placeholder": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"help": "Register an Azure AD app to get a Client (Application) ID"
},
"AZURE_CLIENT_SECRET": {
"required": true,
"description": "Azure Client Secret",
"placeholder": "your-azure-client-secret",
"help": "Generate a client secret for your Azure AD app"
}
},
"setup_instructions": [
"1. Register an application in Azure AD (App Registration)",
"2. Grant the app appropriate Azure service permissions",
"3. Note your Subscription ID, Tenant ID, and App (Client) ID",
"4. Generate a Client Secret for the app",
"5. Paste all the above values in the configuration fields"
],
"uninstall_steps": [
"Remove the MCP server entry from your mcp.json file",
"Restart your MCP client (Cursor/Windsurf)"
],
"documentation": "https://github.com/modelcontextprotocol/servers/tree/main/src/azure",
"installed": false,
"installation_date": null,
"installed_agents": []
}
]
}
+1
-1
{
"name": "@cybertheory/mcpkit",
"version": "0.1.4",
"version": "0.2.0",
"description": "Lightweight UI console to detect MCP-capable coding agents and install MCP servers",

@@ -5,0 +5,0 @@ "keywords": [

# MCP Kit
A lightweight UI console to detect MCP-capable agents and install MCP servers. Easily manage Model Context Protocol integrations for Cursor, Windsurf, and other AI coding assistants.
A lightweight UI console to detect MCP-capable agents and install MCP servers. Easily manage Model Context Protocol integrations for Cursor, Windsurf, Claude Desktop, Continue, Aider, Cline, Neovim, Emacs, JetBrains IDEs and other MCP-capable assistants.

@@ -13,2 +13,24 @@ ![MCP Kit Screenshot](assets/image.png)

```
### 📰 News Ticker (Free & Ready!)
The news ticker displays real tech headlines automatically - **no setup required!**
**Features:**
- ✅ **Completely Free** - No API key needed
- ✅ **Real Tech News** - Live headlines from major sources
- ✅ **Auto-Updates** - Refreshes every 5 minutes
- ✅ **Smart Filtering** - Only shows relevant tech content
**News Coverage Includes:**
- AI & Machine Learning (Claude, OpenAI, Anthropic, MCP)
- Programming Languages & Frameworks (JavaScript, Python, React, Node.js, etc.)
- Major Tech Companies (Google, Apple, Microsoft, Amazon, Meta, Tesla, SpaceX)
- Software Development & DevOps
- Cloud Computing & Cybersecurity
- Blockchain & Cryptocurrency
- Tech Startups & Innovation
- Tech Conferences & Events
The ticker uses a free news proxy service and works out of the box!
No installation required! Runs immediately and caches for faster subsequent runs.

@@ -30,3 +52,3 @@

- **Auto-Detection**: Automatically finds Cursor, Windsurf, and other MCP-capable agents
- **Auto-Detection**: Automatically finds Cursor, Windsurf, Claude Desktop, Continue, Aider, Cline, Neovim, Emacs, JetBrains IDEs and other MCP-capable agents
- **Live Registry**: Always up-to-date MCP server catalog from GitHub

@@ -40,4 +62,28 @@ - **One-Click Install**: Install MCP servers with environment variable configuration

### Code Editors
- **Cursor** - AI-powered code editor
- **Windsurf** - AI coding assistant
- **Windsurf** - AI coding assistant by Codeium
- **Continue** - Open-source AI coding assistant
- **Cline** - AI-powered coding assistant for VS Code
- **VS Code** - Visual Studio Code with MCP extensions
- **Neovim** - Modern Vim with MCP support
- **Emacs** - Extensible text editor with MCP integration
- **JetBrains IDEs** - IntelliJ IDEA, PyCharm, WebStorm with MCP
### AI Assistants
- **Claude Desktop** - Anthropic's Claude AI assistant
- **ChatGPT** - OpenAI's ChatGPT with MCP integration
- **Perplexity AI** - AI-powered search and research assistant
### Terminal Tools
- **Aider** - AI pair programming in your terminal
### Productivity & Communication
- **Notion AI** - AI-powered workspace and productivity tool
- **Obsidian** - Knowledge management with AI plugins
- **Slack** - Team communication with AI integrations
- **Discord** - Community platform with bot integrations
- **Zapier** - Automation platform connecting apps and services
### Custom Agents
- **Custom Agents** - Add your own MCP-compatible tools

@@ -137,4 +183,20 @@

### Code Editors
- **Cursor**: `~/.cursor/mcp.json`
- **Windsurf**: `~/.windsurf/mcp.json`
- **Continue**: `~/.continue/config.json`
- **Cline**: `~/.cline/config.json` (VS Code extension with MCP support)
- **Neovim**: `~/.neovim/mcp.json`
- **Emacs**: `~/.emacs/mcp.json`
- **JetBrains**: `~/.jetbrains/mcp.json`
### AI Assistants
- **Claude Desktop**: `~/.claude/mcp.json`
- **ChatGPT**: Custom configuration file
- **Perplexity AI**: Custom configuration file
### Terminal Tools
- **Aider**: `~/.aiderrc` or `~/.aider/config.json`
### Custom Agents
- **Custom**: Specify any JSON configuration file

@@ -141,0 +203,0 @@

@@ -7,4 +7,4 @@ <!doctype html>

<title>MCP Kit</title>
<script type="module" crossorigin src="/assets/index-MT9qwQi0.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-D8c2vi9G.css">
<script type="module" crossorigin src="/assets/index-D103NwT9.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Bvzz2C6A.css">
</head>

@@ -11,0 +11,0 @@ <body>

*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-4{bottom:1rem}.left-0{left:0}.left-3{left:.75rem}.left-4{left:1rem}.right-0{right:0}.top-0{top:0}.top-2\.5{top:.625rem}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-12{height:3rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-full{height:100%}.max-h-\[90vh\]{max-height:90vh}.min-h-screen{min-height:100vh}.w-12{width:3rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.grid-cols-\[260px_1fr\]{grid-template-columns:260px 1fr}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-r{border-right-width:1px}.border-amber-400\/20{border-color:#fbbf2433}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-blue-400\/20{border-color:#60a5fa33}.border-green-400\/20{border-color:#4ade8033}.border-indigo-400{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-slate-400{--tw-border-opacity: 1;border-color:rgb(148 163 184 / var(--tw-border-opacity, 1))}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.bg-amber-400\/10{background-color:#fbbf241a}.bg-black\/50{background-color:#00000080}.bg-blue-400\/10{background-color:#60a5fa1a}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-green-400\/10{background-color:#4ade801a}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-indigo-950\/40{background-color:#1e1b4b66}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-yellow-600{--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity, 1))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-slate-800{--tw-gradient-from: #1e293b var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 41 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-950\/80{--tw-gradient-from: rgb(2 6 23 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-slate-700{--tw-gradient-to: #334155 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-9{padding-left:2.25rem}.pr-3{padding-right:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-slate-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.placeholder-slate-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}:root{color-scheme:dark}body{margin:0}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-yellow-700:hover{--tw-bg-opacity: 1;background-color:rgb(161 98 7 / var(--tw-bg-opacity, 1))}.hover\:text-blue-300:hover{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}@media (min-width: 640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}

Sorry, the diff of this file is too big to display