protocol-explorer / index.html
Agenten's picture
Upload 3 files
77cbf3e verified
Raw
History Blame Contribute Delete
8.68 kB
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>AI Interoperability Protocol Explorer</title><meta name="description" content="Compare MCP, A2A, OpenAPI, JSON Schema, OAuth and gRPC by interoperability layer and purpose.">
<style>
:root{--bg:#f5fbff;--panel:#ffffff;--ink:#10243e;--muted:#60758d;--line:#d9eaf5;--accent:#087fce;--accent2:#00b8c9;--soft:#eaf7ff;--good:#16784b;--warn:#9a6500}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:radial-gradient(circle at top left,#fff 0,#eef9ff 32%,#f7fbff 72%);color:var(--ink)}
a{color:var(--accent)}button,select,input{font:inherit}.shell{max-width:1180px;margin:auto;padding:28px 20px 70px}.hero{padding:44px 0 28px}.eyebrow{text-transform:uppercase;letter-spacing:.15em;font-weight:800;font-size:.76rem;color:var(--accent)}h1{font-size:clamp(2.4rem,6vw,5rem);line-height:.96;letter-spacing:-.05em;margin:.22em 0}.sub{max-width:790px;color:#3f5873;font-size:1.13rem;line-height:1.65}.bar{display:flex;gap:12px;flex-wrap:wrap;margin:22px 0}.control{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:12px 14px;color:var(--ink);min-width:180px}.btn{border:0;border-radius:14px;padding:12px 16px;background:linear-gradient(135deg,var(--accent),var(--accent2));color:#fff;font-weight:800;cursor:pointer}.ghost{background:#fff;color:var(--ink);border:1px solid var(--line)}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}.card{background:rgba(255,255,255,.94);border:1px solid var(--line);border-radius:20px;padding:20px;box-shadow:0 12px 38px rgba(53,101,139,.08)}.card h3{margin:.2rem 0 .55rem}.tag{display:inline-block;font-size:.75rem;font-weight:800;padding:5px 8px;border-radius:999px;background:var(--soft);color:#17628e;margin:2px 4px 2px 0}.meta{color:var(--muted);font-size:.9rem;line-height:1.55}.section{margin-top:34px}.section h2{font-size:1.8rem;letter-spacing:-.025em}.tablewrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:20px}table{border-collapse:collapse;width:100%;min-width:800px}th,td{text-align:left;padding:13px 14px;border-bottom:1px solid #edf3f7;vertical-align:top}th{font-size:.78rem;text-transform:uppercase;letter-spacing:.07em;color:#557089;background:#f8fcff}.note{padding:16px 18px;background:#fff;border-left:4px solid var(--accent2);border-radius:10px;line-height:1.6;color:#425c75}.footer{margin-top:42px;padding-top:22px;border-top:1px solid var(--line);color:var(--muted);font-size:.9rem}
.kpi{font-size:1.8rem;font-weight:900;letter-spacing:-.04em}.hidden{display:none!important}
@media(max-width:650px){.shell{padding:20px 14px 52px}.hero{padding-top:28px}.control{width:100%}.bar{display:grid}.card{border-radius:16px}}
</style></head><body><main class="shell">
<section class="hero"><div class="eyebrow">Interoperability reference</div><h1>Protocol Explorer</h1>
<p class="sub">A practical map of standards and protocols that connect AI agents, tools, APIs, data and services. Filter by layer, compare roles, and follow primary sources.</p>
<div class="bar"><input id="search" class="control" placeholder="Search protocols or concepts…" aria-label="Search"><select id="layer" class="control"><option value="">All layers</option></select><button id="reset" class="btn ghost">Reset</button></div></section>
<div id="cards" class="grid"></div>
<section class="section"><h2>Side-by-side comparison</h2><div class="tablewrap"><table><thead><tr><th>Protocol</th><th>Layer</th><th>Relationship</th><th>Best fit</th><th>Important boundary</th></tr></thead><tbody id="rows"></tbody></table></div></section>
<section class="section"><div class="note"><b>Key idea:</b> interoperability is layered. MCP and A2A are usually complementary, not mutually exclusive. OpenAPI, JSON Schema, authorization and RPC standards can sit underneath or beside them.</div></section>
<footer class="footer">Primary-source links are provided on every card. This explorer is a technical orientation tool, not a substitute for the current specifications. · Research & industry collaborations: <a href="mailto:agenten@magenta.de">agenten@magenta.de</a></footer>
</main><script>
const DATA=[{"name": "MCP", "full": "Model Context Protocol", "layer": "Tool & context", "relationship": "AI client / agent ↔ tool or resource", "purpose": "Expose tools and contextual capabilities to compatible AI clients.", "status": "Open protocol; current 2026 specification line", "discovery": "Server/tool capability discovery", "best": "Tool use, context access, reusable AI capabilities", "not": "Not primarily an agent-to-agent task protocol.", "source": "https://modelcontextprotocol.io/"}, {"name": "A2A", "full": "Agent2Agent Protocol", "layer": "Agent communication", "relationship": "Agent ↔ agent", "purpose": "Enable independent agents to discover capabilities, exchange messages and collaborate on tasks.", "status": "Open standard; latest released specification listed as 1.0.0", "discovery": "Agent capabilities / Agent Card", "best": "Cross-framework and cross-vendor agent collaboration", "not": "Not a replacement for tool protocols such as MCP.", "source": "https://a2a-protocol.org/"}, {"name": "OpenAPI", "full": "OpenAPI Specification", "layer": "API description", "relationship": "Application / agent ↔ HTTP service", "purpose": "Describe HTTP APIs in a machine-readable, implementation-neutral format.", "status": "Mature open specification", "discovery": "API description document", "best": "Enterprise APIs, existing services, generated clients and tool wrappers", "not": "Does not define autonomous agent collaboration.", "source": "https://www.openapis.org/"}, {"name": "JSON Schema", "full": "JSON Schema", "layer": "Data contracts", "relationship": "Data ↔ data / API", "purpose": "Describe and validate the structure and constraints of JSON data.", "status": "Mature open specification family", "discovery": "Schema documents", "best": "Structured outputs, contracts, validation, tool arguments", "not": "Does not provide transport, identity or orchestration.", "source": "https://json-schema.org/"}, {"name": "OAuth", "full": "OAuth", "layer": "Authorization", "relationship": "Client / agent ↔ protected service", "purpose": "Provide delegated authorization patterns for protected resources.", "status": "Widely deployed authorization framework family", "discovery": "Authorization metadata depends on profile/deployment", "best": "Scoped access, enterprise authorization, delegated permissions", "not": "Authentication and agent identity require careful profile choices.", "source": "https://oauth.net/"}, {"name": "gRPC", "full": "gRPC + Protocol Buffers", "layer": "Service communication", "relationship": "Service ↔ service", "purpose": "Provide typed, high-performance remote procedure calls.", "status": "Mature open-source RPC ecosystem", "discovery": "Service definitions", "best": "Typed internal services and high-performance distributed systems", "not": "Not specifically an AI-agent interoperability standard.", "source": "https://grpc.io/"}];
const cards=document.getElementById('cards'), rows=document.getElementById('rows'), search=document.getElementById('search'), layer=document.getElementById('layer');
[...new Set(DATA.map(x=>x.layer))].sort().forEach(v=>{const o=document.createElement('option');o.value=v;o.textContent=v;layer.appendChild(o);});
function esc(s){return String(s).replace(/[&<>"']/g,m=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#039;'}[m]));}
function render(){const q=search.value.trim().toLowerCase(), l=layer.value;const f=DATA.filter(x=>(!l||x.layer===l)&&(!q||JSON.stringify(x).toLowerCase().includes(q)));
cards.innerHTML=f.map(x=>`<article class="card"><span class="tag">${esc(x.layer)}</span><h3>${esc(x.name)} <span class="meta">— ${esc(x.full)}</span></h3><p>${esc(x.purpose)}</p><p class="meta"><b>Relationship:</b> ${esc(x.relationship)}<br><b>Discovery:</b> ${esc(x.discovery)}<br><b>Status:</b> ${esc(x.status)}</p><p><a href="${esc(x.source)}" target="_blank" rel="noopener">Primary source ↗</a></p></article>`).join('');
rows.innerHTML=f.map(x=>`<tr><td><b>${esc(x.name)}</b></td><td>${esc(x.layer)}</td><td>${esc(x.relationship)}</td><td>${esc(x.best)}</td><td>${esc(x.not)}</td></tr>`).join('');
}
search.addEventListener('input',render);layer.addEventListener('change',render);document.getElementById('reset').addEventListener('click',()=>{search.value='';layer.value='';render();});render();
</script></body></html>