Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ pip install longbridge
{
"mcpServers": {
"longbridge": {
"url": "https://openapi.longbridge.com/mcp"
"url": "https://mcp.longbridge.com"
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion docs/.vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import yaml from 'js-yaml'

const __dirname = dirname(fileURLToPath(import.meta.url))
const docsRoot = resolve(__dirname, '..')
const MCP_TOOLS_URL = 'https://openapi.longbridge.com/mcp/tools.json'
const MCP_TOOLS_URL = 'https://mcp.longbridge.com/mcp/tools.json'
const MCP_TOOLS_DATA_PATH = resolve(__dirname, 'data/mcp-tools.json')
const regionCfg = getRegionConfig()
const regionSrcExclude = computeSrcExclude(docsRoot)
Expand Down
1 change: 1 addition & 0 deletions docs/.vitepress/theme/components/AppNav.vue
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ const avatarCloseTimer = ref<ReturnType<typeof setTimeout> | null>(null)

const avatarMenuItems = computed(() => [
{ title: 'Dashboard', href: '/dashboard' },
{ title: 'Connect AI', href: '/connect' },
{ title: 'Log out', href: '/log-out' },
])

Expand Down
10 changes: 5 additions & 5 deletions docs/.vitepress/theme/components/NewHomePage/ProductMCP.vue
Original file line number Diff line number Diff line change
Expand Up @@ -50,38 +50,38 @@ const clients = [
name: 'Claude Code',
logo: 'https://assets.lbctrl.com/uploads/6932dfac-0f9c-4577-bdd8-fc3d22d4223a/claude.svg',
type: 'shell' as const,
cmd: 'claude mcp add --transport http longbridge https://openapi.longbridge.com/mcp',
cmd: 'claude mcp add --transport http longbridge https://mcp.longbridge.com',
},
{
id: 'codex',
name: 'Codex',
logo: 'https://assets.lbctrl.com/uploads/88eb58fe-b3bb-4875-90c7-c97e6d8fcc9e/openai.svg',
type: 'ui' as const,
steps: ['Settings', 'MCP Servers', 'Add Server'],
fields: { Name: 'longbridge', Type: 'Streamable HTTP', URL: 'https://openapi.longbridge.com/mcp' },
fields: { Name: 'longbridge', Type: 'Streamable HTTP', URL: 'https://mcp.longbridge.com' },
},
{
id: 'cursor',
name: 'Cursor',
logo: 'https://assets.lbctrl.com/uploads/f694478e-201b-4e74-a7b6-023639a27805/cursor.svg',
type: 'ui' as const,
steps: ['Settings', 'MCP Servers', 'Add Remote MCP Server'],
fields: { URL: 'https://openapi.longbridge.com/mcp' },
fields: { URL: 'https://mcp.longbridge.com' },
},
{
id: 'zed',
name: 'Zed',
logo: 'https://assets.lbctrl.com/uploads/3418077a-9766-4514-bc8e-eef076309689/zed.svg',
type: 'json' as const,
json: { mcpServers: { longbridge: { url: 'https://openapi.longbridge.com/mcp' } } },
json: { mcpServers: { longbridge: { url: 'https://mcp.longbridge.com' } } },
},
{
id: 'cherry',
name: 'Cherry Studio',
logo: 'https://assets.lbctrl.com/uploads/df8f9467-91a5-4bdb-8dde-5127441f0b04/cherrystudio.svg',
type: 'ui' as const,
steps: ['Settings', 'MCP Servers', 'Add'],
fields: { URL: 'https://openapi.longbridge.com/mcp' },
fields: { URL: 'https://mcp.longbridge.com' },
},
]

Expand Down
4 changes: 2 additions & 2 deletions docs/.vitepress/theme/components/NewHomePage/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -1773,7 +1773,7 @@ const GETSTARTED = [
<button
class="code-copy"
@click="
copyToClipboard('claude mcp add --transport http longbridge \\\n https://openapi.longbridge.com/mcp')
copyToClipboard('claude mcp add --transport http longbridge \\\n https://mcp.longbridge.com')
">
<svg
width="13"
Expand All @@ -1792,7 +1792,7 @@ const GETSTARTED = [
<div class="code-body" style="font-size: 13.5px; line-height: 1.8">
<div><span class="ln-comment"># One-line install for Claude Code</span></div>
<div><span class="ln-prompt">$ </span>claude mcp add --transport http longbridge \</div>
<div>&nbsp;&nbsp;<span class="ln-str">https://openapi.longbridge.com/mcp</span></div>
<div>&nbsp;&nbsp;<span class="ln-str">https://mcp.longbridge.com</span></div>
<div>&nbsp;</div>
<div style="color: var(--lb-fg-2)">→ Opening browser for OAuth 2.1…</div>
<div style="color: var(--lb-fg-2)">✓ Authenticated as jason@longbridge.com</div>
Expand Down
227 changes: 187 additions & 40 deletions docs/.vitepress/theme/components/Skill.vue
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,15 @@ const LOCALE = {
title1: 'Longbridge Skill',
title2: 'Unlock market insights, deep research and intelligent trading for your AI.',
desc: 'With Longbridge Skill, your AI assistant — Claude, Cursor, ChatGPT, Gemini, Codex — can screen stocks, decode earnings, track insider moves, and place orders, all in plain conversation.',
tabConnect: 'Connect AI',
tabPrompt: 'Copy command',
connectLabel: 'Authorization happens upfront — grab a code on the Connect page, hand it to your AI, and it takes care of the rest:',
connectSteps: [
'Sign in on the Connect page to get a one-time auth code',
'Send the authorization snippet to your AI assistant',
'Your AI redeems the code and plugs into Longbridge — no browser hops along the way',
],
connectCta: 'Connect AI',
installLabel: 'Copy and send to any AI — it will walk you through install:',
installLink: 'View installation guide for each client',
agentsLabel: 'Supported AI tools',
Expand Down Expand Up @@ -119,6 +128,15 @@ const LOCALE = {
title1: 'Longbridge Skill',
title2: '为您的 AI 解锁市场洞察、深度研究与智能交易',
desc: '借助 Longbridge Skill,您的 AI 助手——Claude、Cursor、ChatGPT、Gemini、Codex——可以筛选股票、解读财报、追踪机构动向,并直接下单,全程自然对话。',
tabConnect: 'Connect AI',
tabPrompt: '复制命令',
connectLabel: '授权一步前置——在 Connect 页面拿到授权码,交给 AI,剩下的它来完成:',
connectSteps: [
'登录 Connect 页面,获取一次性授权码',
'将授权指令发送给您的 AI 助手',
'AI 自动兑换授权码并接入 Longbridge,全程无需跳转浏览器',
],
connectCta: 'Connect AI',
installLabel: '复制发送给任意 AI——它将引导您完成安装:',
installLink: '查看各客户端安装指南',
agentsLabel: '支持的 AI 工具',
Expand Down Expand Up @@ -341,6 +359,15 @@ const LOCALE = {
title1: 'Longbridge Skill',
title2: '為您的 AI 解鎖市場洞察、深度研究與智能交易',
desc: '借助 Longbridge Skill,您的 AI 助手——Claude、Cursor、ChatGPT、Gemini、Codex——可以篩選股票、解讀財報、追蹤機構動向,並直接下單,全程自然對話。',
tabConnect: 'Connect AI',
tabPrompt: '複製命令',
connectLabel: '授權一步前置——在 Connect 頁面拿到授權碼,交給 AI,剩下的它來完成:',
connectSteps: [
'登入 Connect 頁面,獲取一次性授權碼',
'將授權指令發送給您的 AI 助手',
'AI 自動兌換授權碼並接入 Longbridge,全程無需跳轉瀏覽器',
],
connectCta: 'Connect AI',
installLabel: '複製發送給任意 AI——它將引導您完成安裝:',
installLink: '查看各客戶端安裝指南',
agentsLabel: '支援的 AI 工具',
Expand Down Expand Up @@ -1019,6 +1046,7 @@ const CAP_REFERENCE = [
const activeCat = ref('All')
const scenarioIdx = ref(0)
const activeAgent = ref('OpenClaw')
const installMode = ref<'connect' | 'prompt'>('connect')
const copied = ref(false)
const copiedGetStarted = ref(false)

Expand Down Expand Up @@ -1268,52 +1296,96 @@ function triggerRipple(event: MouseEvent, el: HTMLElement) {
</p>

<div class="skill-hero-install">
<div class="skill-hero-install-label">{{ content.hero.installLabel }}</div>
<div class="skill-hero-install-cmd">
<code>{{ installCmd }}</code>
<button class="code-copy" @click="copyInstall" :title="copied ? 'Copied!' : 'Copy'">
<svg
v-if="!copied"
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="1.6"
stroke-linecap="round"
stroke-linejoin="round">
<rect x="9" y="9" width="13" height="13" rx="2" ry="2" />
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />
</svg>
<div class="skill-hero-seg">
<button
:class="['skill-hero-seg-btn', installMode === 'connect' && 'is-active']"
@click="installMode = 'connect'">
{{ content.hero.tabConnect }}
</button>
<button
:class="['skill-hero-seg-btn', installMode === 'prompt' && 'is-active']"
@click="installMode = 'prompt'">
{{ content.hero.tabPrompt }}
</button>
</div>

<template v-if="installMode === 'connect'">
<div class="skill-hero-install-label">{{ content.hero.connectLabel }}</div>
<div class="skill-hero-connect-card">
<div v-for="(step, i) in content.hero.connectSteps" :key="i" class="skill-hero-connect-step">
<span class="skill-hero-connect-step-num">{{ i + 1 }}</span>
<span>{{ step }}</span>
</div>
<a class="btn btn-dark" href="/connect" target="_self">
<svg
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="1.6"
stroke-linecap="round"
stroke-linejoin="round">
<path d="M12 8V4H8" />
<rect width="16" height="12" x="4" y="8" rx="2" />
<path d="M2 14h2" />
<path d="M20 14h2" />
<path d="M15 13v2" />
<path d="M9 13v2" />
</svg>
{{ content.hero.connectCta }}
</a>
</div>
</template>

<template v-else>
<div class="skill-hero-install-label">{{ content.hero.installLabel }}</div>
<div class="skill-hero-install-cmd">
<code>{{ installCmd }}</code>
<button class="code-copy" @click="copyInstall" :title="copied ? 'Copied!' : 'Copy'">
<svg
v-if="!copied"
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="1.6"
stroke-linecap="round"
stroke-linejoin="round">
<rect x="9" y="9" width="13" height="13" rx="2" ry="2" />
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />
</svg>
<svg
v-else
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="1.6"
stroke-linecap="round"
stroke-linejoin="round">
<polyline points="20 6 9 17 4 12" />
</svg>
</button>
</div>
<a class="skill-hero-install-link" :href="localePfx + '/skill/install'">
{{ content.hero.installLink }}
<svg
v-else
width="14"
height="14"
width="12"
height="12"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="1.6"
stroke-linecap="round"
stroke-linejoin="round">
<polyline points="20 6 9 17 4 12" />
<path d="M5 12h14" />
<path d="m12 5 7 7-7 7" />
</svg>
</button>
</div>
<a class="skill-hero-install-link" :href="localePfx + '/skill/install'">
{{ content.hero.installLink }}
<svg
width="12"
height="12"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="1.6"
stroke-linecap="round"
stroke-linejoin="round">
<path d="M5 12h14" />
<path d="m12 5 7 7-7 7" />
</svg>
</a>
</a>
</template>
</div>

<div class="skill-hero-agents">
Expand Down Expand Up @@ -2154,8 +2226,8 @@ function triggerRipple(event: MouseEvent, el: HTMLElement) {
gap: 12px;
}
.skill-hero-install-label {
font-size: 12px;
color: var(--lb-fg-3);
font-size: 13px;
color: var(--lb-fg-2);
font-weight: 500;
}
.skill-hero-install-cmd {
Expand All @@ -2178,6 +2250,73 @@ function triggerRipple(event: MouseEvent, el: HTMLElement) {
flex: 1;
text-align: left;
}
.skill-hero-connect-card {
display: flex;
flex-direction: column;
gap: 12px;
background: var(--lb-bg-2);
border: 1px solid var(--app-card-stroke);
border-radius: 10px;
padding: 16px;
max-width: 480px;
width: 100%;
}
.skill-hero-connect-step {
display: flex;
align-items: flex-start;
gap: 10px;
font-size: 13px;
color: var(--lb-fg-2);
text-align: left;
line-height: 1.5;
}
.skill-hero-connect-step-num {
flex: none;
width: 18px;
height: 18px;
border-radius: 50%;
background: color-mix(in srgb, var(--lb-brand) 14%, transparent);
color: var(--lb-brand);
font-size: 11px;
font-weight: 700;
display: inline-flex;
align-items: center;
justify-content: center;
margin-top: 1px;
}
.skill-hero-connect-card .btn {
margin-top: 4px;
align-self: center;
}
.skill-hero-seg {
display: inline-flex;
align-items: center;
gap: 2px;
padding: 3px;
border-radius: 999px;
background: var(--lb-bg-2);
border: 1px solid var(--app-card-stroke);
}
.skill-hero-seg-btn {
padding: 6px 18px;
border-radius: 999px;
font-size: 13px;
font-weight: 600;
color: var(--lb-fg-3);
background: transparent;
border: none;
cursor: pointer;
transition:
color 0.15s,
background 0.15s;
}
.skill-hero-seg-btn:hover {
color: var(--lb-fg-1);
}
.skill-hero-seg-btn.is-active {
color: #fff;
background: var(--lb-brand);
}
.skill-hero-install-link {
font-size: 13px;
color: var(--lb-brand);
Expand Down Expand Up @@ -2937,6 +3076,14 @@ function triggerRipple(event: MouseEvent, el: HTMLElement) {
background: var(--lb-brand);
color: #fff;
}
.btn-dark {
background: #111;
color: #fff;
}
.dark .btn-dark {
background: #fff;
color: #111;
}

/* ─── Skills Catalog ──────────────────────────────────────────────────────── */
.sc-header {
Expand Down
Loading
Loading