Skip to main content
Glama

get_shell

Generate an HTML skeleton for Shell A, B, C, or D with CSS/JS links and SLOT comments. Use this base to fill in content.

Instructions

Returns a ready-to-fill HTML skeleton for Shell A/B/C/D with all required CSS/JS links and SLOT comments. Copy-paste this as the base, then fill the SLOTs.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
shellYes

Implementation Reference

  • api/mcp.ts:587-590 (registration)
    The tool 'get_shell' is registered on the MCP server via server.tool() with a Zod schema enum for shell type (A/B/C/D).
    server.tool("get_shell", "Returns a complete HTML skeleton (<!DOCTYPE> to </html>) for Shell A/B/C/D with all CSS/JS CDN links pre-filled and SLOT comments where you insert components. Use this as your starting template.", { shell: z.enum(["A","B","C","D"]) }, async ({ shell }) => {
      const s = SHELLS[shell];
      return { content: [{ type: "text" as const, text: s ? `## Shell ${shell} — Ready-to-use HTML skeleton\nAll CSS/JS links point to CDN: ${CDN_BASE}\nAll icon <img src> must also use: ${CDN_BASE}/assets/icons/ICON.svg\n\n\`\`\`html\n${s}\n\`\`\`` : `Unknown: ${shell}` }] };
    });
  • Input schema for get_shell accepts a single 'shell' parameter that must be one of 'A', 'B', 'C', or 'D'.
    server.tool("get_shell", "Returns a complete HTML skeleton (<!DOCTYPE> to </html>) for Shell A/B/C/D with all CSS/JS CDN links pre-filled and SLOT comments where you insert components. Use this as your starting template.", { shell: z.enum(["A","B","C","D"]) }, async ({ shell }) => {
  • Handler function that looks up the shell in the SHELLS record and returns the full HTML skeleton string wrapped in markdown.
    server.tool("get_shell", "Returns a complete HTML skeleton (<!DOCTYPE> to </html>) for Shell A/B/C/D with all CSS/JS CDN links pre-filled and SLOT comments where you insert components. Use this as your starting template.", { shell: z.enum(["A","B","C","D"]) }, async ({ shell }) => {
      const s = SHELLS[shell];
      return { content: [{ type: "text" as const, text: s ? `## Shell ${shell} — Ready-to-use HTML skeleton\nAll CSS/JS links point to CDN: ${CDN_BASE}\nAll icon <img src> must also use: ${CDN_BASE}/assets/icons/ICON.svg\n\n\`\`\`html\n${s}\n\`\`\`` : `Unknown: ${shell}` }] };
    });
  • The SHELLS static data record contains the HTML skeletons for Shell A, B, C, and D. Each is a complete HTML document with pre-filled CDN links and SLOT comments.
    const SHELLS: Record<string, string> = {
      A: `<!DOCTYPE html>\n<html lang="en">\n<head>\n  <meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" />\n  <title><!-- PAGE TITLE --> — Log360 Cloud</title>\n  <link rel="stylesheet" href="${CDN_BASE}/components/tokens.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/layout.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/topnavbar.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/line-tab.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/widget.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/table.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/responsive.css" />\n  <style>html,body{height:100%;margin:0;overflow:hidden;}.app-shell{height:100vh;display:flex;flex-direction:column;overflow:hidden;}</style>\n</head>\n<body>\n<div class="app-shell">\n  <!-- SLOT: TopNavBar (data-active-tab="Home") -->\n  <!-- SLOT: Line Tab + Actions -->\n  <div class="dash"><div class="dash__grid">\n    <!-- SLOT: stat-row, tile-grid, dash__row widgets -->\n  </div></div>\n</div>\n<script src="${CDN_BASE}/components/lib/echarts.min.js"></script>\n<script src="${CDN_BASE}/components/echarts-elegant-theme.js"></script>\n<script src="${CDN_BASE}/components/echarts-widget.js"></script>\n<script src="${CDN_BASE}/components/topnavbar.js"></script>\n<script src="${CDN_BASE}/components/line-tab.js"></script>\n<script src="${CDN_BASE}/components/icon-engine.js"></script>\n</body></html>`,
      B: `<!DOCTYPE html>\n<html lang="en">\n<head>\n  <meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" />\n  <title><!-- PAGE TITLE --> — Log360 Cloud</title>\n  <link rel="stylesheet" href="${CDN_BASE}/components/tokens.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/layout.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/topnavbar.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/sidemenu.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/header.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/classic-tab.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/table.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/form-input.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/form-dropdown.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/drawer.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/responsive.css" />\n  <style>html,body{height:100%;margin:0;overflow:hidden;}.app-shell{height:100vh;display:flex;flex-direction:column;overflow:hidden;}.app-body{flex:1;display:flex;overflow:hidden;min-height:0;}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;padding:0 16px;}</style>\n</head>\n<body>\n<div class="sidemenu-backdrop"></div>\n<div class="app-shell">\n  <!-- SLOT: TopNavBar (data-active-tab="Settings") -->\n  <div class="app-body">\n    <!-- SLOT: aside.sidemenu -->\n    <button class="sidemenu-expand" id="sidebarExpand"></button>\n    <main class="main-content">\n      <!-- SLOT: page-header -->\n      <!-- SLOT: classic-tab -->\n    </main>\n  </div>\n</div>\n<script src="${CDN_BASE}/components/topnavbar.js"></script>\n<script src="${CDN_BASE}/components/sidemenu.js"></script>\n<script src="${CDN_BASE}/components/classic-tab.js"></script>\n<script src="${CDN_BASE}/components/table.js"></script>\n<script src="${CDN_BASE}/components/drawer.js"></script>\n<script src="${CDN_BASE}/components/icon-engine.js"></script>\n</body></html>`,
      C: `<!DOCTYPE html>\n<html lang="en">\n<head>\n  <meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" />\n  <title><!-- REPORT TITLE --> — Reports — Log360 Cloud</title>\n  <link rel="stylesheet" href="${CDN_BASE}/components/tokens.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/layout.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/topnavbar.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/sidemenu.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/header.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/classic-tab.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/line-tab.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/table.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/form-input.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/form-dropdown.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/drawer.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/rpt-chart-floater.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/responsive.css" />\n  <style>html,body{height:100%;margin:0;overflow:hidden;}.app-shell{height:100vh;display:flex;flex-direction:column;overflow:hidden;}.app-body{flex:1;display:flex;overflow:hidden;min-height:0;}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;padding:0 16px;}.classic-tab{flex-shrink:0;}.table-scroll-area{flex:1;overflow-y:auto;min-height:0;position:relative;}.actionbar{position:sticky;top:0;z-index:3;background:#fff;}</style>\n</head>\n<body>\n<div class="sidemenu-backdrop"></div>\n<div class="app-shell">\n  <!-- SLOT: TopNavBar (data-active-tab="Reports") -->\n  <div class="reports-quicklink"><!-- SLOT: line-tab quicklink --></div>\n  <div class="app-body">\n    <!-- SLOT: aside.sidemenu.sidemenu--type2 -->\n    <button class="sidemenu-expand" id="sidebarExpand"></button>\n    <main class="main-content">\n      <!-- SLOT: page-header (Variant 3) -->\n      <!-- SLOT: reports-input-row -->\n      <!-- SLOT: classic-tab [chart ONLY] -->\n      <div class="table-scroll-area">\n        <!-- SLOT: actionbar Type 8 -->\n        <!-- SLOT: data-table-wrap -->\n      </div>\n    </main>\n  </div>\n</div>\n<script src="${CDN_BASE}/components/lib/echarts.min.js"></script>\n<script src="${CDN_BASE}/components/echarts-elegant-theme.js"></script>\n<script src="${CDN_BASE}/components/echarts-widget.js"></script>\n<script src="${CDN_BASE}/components/topnavbar.js"></script>\n<script src="${CDN_BASE}/components/sidemenu.js"></script>\n<script src="${CDN_BASE}/components/classic-tab.js"></script>\n<script src="${CDN_BASE}/components/line-tab.js"></script>\n<script src="${CDN_BASE}/components/table.js"></script>\n<script src="${CDN_BASE}/components/drawer.js"></script>\n<script src="${CDN_BASE}/components/rpt-chart-floater.js"></script>\n<script src="${CDN_BASE}/components/icon-engine.js"></script>\n</body></html>`,
      D: `<!DOCTYPE html>\n<html lang="en">\n<head>\n  <meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" />\n  <title><!-- TITLE --> — Log360 Cloud</title>\n  <link rel="stylesheet" href="${CDN_BASE}/components/tokens.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/layout.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/topnavbar.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/line-tab.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/header.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/widget.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/table.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/drawer.css" />\n  <link rel="stylesheet" href="${CDN_BASE}/components/responsive.css" />\n  <style>html,body{height:100%;margin:0;overflow:hidden;}.app-shell{height:100vh;display:flex;flex-direction:column;overflow:hidden;}.app-body{flex:1;display:flex;overflow:hidden;min-height:0;}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;padding:0;}.split-layout{display:flex;flex:1;min-height:0;}.left-panel{flex:1;overflow-y:auto;padding:0 16px 24px;}.right-panel{width:380px;border-left:1px solid #E9E9E9;display:flex;flex-direction:column;}</style>\n</head>\n<body>\n<div class="app-shell">\n  <!-- SLOT: TopNavBar -->\n  <div class="app-body"><main class="main-content">\n    <!-- SLOT: line-tab -->\n    <div class="line-tab__body" style="flex:1;display:flex;flex-direction:column;min-height:0;">\n      <div class="split-layout">\n        <div class="left-panel"><!-- SLOT --></div>\n        <div class="right-panel"><!-- SLOT --></div>\n      </div>\n    </div>\n  </main></div>\n</div>\n<script src="${CDN_BASE}/components/lib/echarts.min.js"></script>\n<script src="${CDN_BASE}/components/echarts-elegant-theme.js"></script>\n<script src="${CDN_BASE}/components/topnavbar.js"></script>\n<script src="${CDN_BASE}/components/line-tab.js"></script>\n</body></html>`,
    };
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool returns a ready-to-fill skeleton and is intended for copy-paste, implying it is a read-only template generator with no side effects. However, it does not mention authentication or rate limits, which are likely irrelevant for such a simple tool, so the disclosure is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action, followed by usage guidance. No extraneous words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema), the description is mostly complete. It tells what the output is (skeleton with links and slot comments) and how to use it. It does not specify the return format (e.g., plain text) or mention example content, but it is sufficient for the intended use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must add meaning. It mentions 'Shell A/B/C/D', connecting the enum values to the concept of shells. It adds context about the skeleton including CSS/JS links and SLOT comments, but does not explain differences between the shells. Still, it adds significant context beyond the bare enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns an HTML skeleton for Shell A/B/C/D with CSS/JS links and SLOT comments. The verb 'returns' and resource 'HTML skeleton' are specific, and the sibling tools like get_component are distinct, so purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear usage instruction: 'Copy-paste this as the base, then fill the SLOTs.' It does not explicitly say when to use this tool over siblings like get_full_wiki_file, but the focus on shells versus components is implied by naming. No explicit exclusions or alternatives are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Anguraj-zoho/elegant-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server