<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>知几信号 Zhiji Signal — A股市场相变信号检测 MCP Server</title>
<meta name="description" content="A股市场相变信号检测MCP服务，基于Landau-Ginzburg框架，提供实时Phi/D信号、三态相变判断、行业热力图。无需API Key，开箱即用。">
<meta name="keywords" content="MCP,Model Context Protocol,A股,市场信号,相变,Landau-Ginzburg,Phi,D,知几,signal">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🔮</text></svg>">
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{background:#0a0a0a;color:#e0e0e0;font-family:system-ui,-apple-system,sans-serif;line-height:1.7;padding:2rem;max-width:900px;margin:0 auto}
a{color:#48dbfb;text-decoration:none}
a:hover{text-decoration:underline}
h1{font-size:2rem;margin-bottom:0.3em;background:linear-gradient(135deg,#48dbfb,#ff6b6b);-webkit-background-clip:text;-webkit-text-fill-color:transparent}
h2{font-size:1.3rem;color:#48dbfb;margin:1.5em 0 0.5em;border-bottom:1px solid #333;padding-bottom:0.3em}
.subtitle{color:#999;font-size:1.1em;margin-bottom:1.5em}
.badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:0.8em;margin-right:6px}
.badge-mcp{background:#1a5276;color:#5dade2}
.badge-auth{background:#1e4620;color:#58d68d}
.badge-ver{background:#4a235a;color:#bb8fce}
.badge-status{background:#7d6608;color:#f9e79f}
code{background:#1a1a2e;padding:2px 6px;border-radius:3px;font-size:0.9em;color:#ff79c6}
pre{background:#1a1a2e;padding:1em;border-radius:6px;overflow-x:auto;font-size:0.85em;margin:0.5em 0}
.tool-card{background:#111;border:1px solid #333;border-radius:8px;padding:1em;margin:0.5em 0}
.tool-name{color:#ff6b6b;font-weight:bold;font-family:monospace}
.tag{display:inline-block;background:#1a1a2e;padding:1px 6px;border-radius:3px;font-size:0.75em;color:#999;margin:0 2px}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:0.5em;margin:0.5em 0}
.stat{background:#111;padding:0.8em;border-radius:6px;text-align:center}
.stat-val{font-size:1.5em;font-weight:bold;color:#48dbfb}
.stat-label{font-size:0.8em;color:#666}
.cta{display:inline-block;background:linear-gradient(135deg,#48dbfb,#3498db);color:#000;padding:0.6em 1.5em;border-radius:6px;font-weight:bold;margin:0.5em 0.3em;text-decoration:none}
.cta:hover{text-decoration:none;opacity:0.9}
</style>
</head>
<body>

<h1>🔮 知几信号 Zhiji Signal</h1>
<p class="subtitle">A股市场相变信号检测 MCP Server — 基于 Landau-Ginzburg 框架</p>

<p>
<span class="badge badge-mcp">MCP Streamable HTTP</span>
<span class="badge badge-auth">无需授权</span>
<span class="badge badge-ver">v5.3.5</span>
<span class="badge badge-status">● 在线</span>
</p>

<h2>⚡ 快速接入</h2>
<p>在任意 MCP 客户端配置中添加：</p>
<pre><code>{
  "mcpServers": {
    "zhiji-signal": {
      "url": "https://zhiji-signal.run402.com/mcp"
    }
  }
}</code></pre>
<p>无需 API Key，开箱即用。兼容 Claude Desktop、Cursor、VS Code、Cherry Studio 等所有 MCP 客户端。</p>

<h2>🛠 工具列表</h2>

<div class="tool-card">
  <span class="tool-name">phase-signal</span>
  <span class="tag">实时</span>
  <span class="tag">无需参数</span>
  <p>获取 A 股 HS300 实时相变信号。返回 Phi 整合度、D 多样性、chi 散度、delta_F、SoTI、三态判断。</p>
</div>

<div class="tool-card">
  <span class="tool-name">market-state</span>
  <span class="tag">实时</span>
  <span class="tag">无需参数</span>
  <p>市场三态判断：SOLID_FROZEN（固态-凝结）/ LIQUID_FLOWING（液态-流动）/ GAS_DISSIPATING（气态-弥散）。</p>
</div>

<div class="tool-card">
  <span class="tool-name">sector-heatmap</span>
  <span class="tag">实时</span>
  <span class="tag">无需参数</span>
  <p>沪深 300 行业热力图，各行业 Phi 值和相态，定位强弱板块。</p>
</div>

<div class="tool-card">
  <span class="tool-name">signal-history</span>
  <span class="tag">历史</span>
  <p>信号历史记录查询，可回溯 Phi/D 变化趋势。</p>
</div>

<div class="tool-card">
  <span class="tool-name">health-check</span>
  <span class="tag">诊断</span>
  <span class="tag">无需参数</span>
  <p>服务健康检查，返回版本、运行时间、数据源状态。</p>
</div>

<h2>📊 当前信号</h2>
<div class="grid" id="signal-grid">
  <div class="stat"><div class="stat-val" id="phi-val">--</div><div class="stat-label">Phi 整合度</div></div>
  <div class="stat"><div class="stat-val" id="state-val">--</div><div class="stat-label">市场状态</div></div>
</div>

<h2>🔬 理论框架</h2>
<p>基于 <strong>Landau-Ginzburg 相变理论</strong>，将市场视为一个近临界系统：</p>
<ul>
  <li><strong>Phi (φ) 整合度</strong>：市场各组分协同程度，φ→1 为高度整合（固态/液态），φ→0 为碎片化（气态）</li>
  <li><strong>D 多样性</strong>：市场参与者的多样性/异质性</li>
  <li><strong>chi (χ) 散度</strong>：响应函数发散程度，χ 发散 = 临界点附近</li>
  <li><strong>delta_F (δF)</strong>：自由能差，δF&gt;0 为涌现（几涌现），δF≤0 为收敛</li>
</ul>
<p>核心洞见：<strong>几 = 动之微</strong> — 信号在意识之前，不是对已发生事件的描述，而是对相变条件的探测。</p>

<h2>📡 API 端点</h2>
<table style="width:100%;border-collapse:collapse">
<tr style="border-bottom:1px solid #333"><td style="padding:0.3em"><code>POST /mcp</code></td><td>MCP JSON-RPC 端点（Streamable HTTP）</td></tr>
<tr style="border-bottom:1px solid #333"><td style="padding:0.3em"><code>GET /api/services</code></td><td>Agent 服务发现（免 auth）</td></tr>
<tr style="border-bottom:1px solid #333"><td style="padding:0.3em"><code>GET /api/phase-signal</code></td><td>REST API（需 API Key）</td></tr>
<tr style="border-bottom:1px solid #333"><td style="padding:0.3em"><code>GET /api/mcp-server-card</code></td><td>MCP Server Card 元数据</td></tr>
<tr style="border-bottom:1px solid #333"><td style="padding:0.3em"><code>GET /.well-known/mcp-registry-auth</code></td><td>MCP Registry 认证信息</td></tr>
</table>

<h2>🔗 链接</h2>
<p>
<a href="/api/services">服务发现</a> ·
<a href="/api/mcp-server-card">MCP Server Card</a> ·
<a href="https://registry.modelcontextprotocol.io/v0.1/servers?search=zhiji">MCP Registry</a> ·
<a href="https://zhiji-daily-report.run402.com/api/services">日报服务</a> ·
<a href="https://llm-router.run402.com/api/services">LLM 路由</a>
</p>

<script>
fetch('/api/phase-signal',{headers:{'x-api-key':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsInByb2plY3RfaWQiOiJwcmpfMTc4MTIzNTQ1NDI3Ml8wMDM2IiwiaXNzIjoiYWdlbnRkYiIsImlhdCI6MTc4MTIzNTQ1NH0.GcUL0X2iR8BTr53aWBxd02tsTA21TpzsIV6pofbYuT4'}})
.then(r=>r.json()).then(d=>{
  if(d.phi!==undefined)document.getElementById('phi-val').textContent=d.phi.toFixed(4);
  if(d.state)document.getElementById('state-val').textContent=d.state.replace(/_/g,' ');
}).catch(()=>{});
</script>
</body>
</html>
