diff --git a/package-lock.json b/package-lock.json index 12f089c..2be5f85 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "devDependencies": { "@biomejs/biome": "2.4.15", "@clerk/clerk-react": "^5.61.8", + "@tabler/icons-react": "^3.45.0", "@tailwindcss/vite": "^4.3.1", "@types/inquirer": "^9.0.9", "@types/node": "^22.10.0", @@ -1170,6 +1171,34 @@ "dev": true, "license": "MIT" }, + "node_modules/@tabler/icons": { + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.45.0.tgz", + "integrity": "sha512-jiATwV8+zGYLTZ7gMLGivCic+KtsMZXcDmufIG8umlLxoHhI6902hGYIEt0Oa9Y9SXblNzUlrisHm5jOFMxOQA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@tabler/icons-react": { + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.45.0.tgz", + "integrity": "sha512-t/AuKs7ALMDDTY+B9IvfZnlO0mbLlP/lJxP/HnGC49QkM8mCsTN38kYyxjXxgrb1+TeK53ioVBJqIV7n/eysXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tabler/icons": "3.45.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "peerDependencies": { + "react": ">= 16" + } + }, "node_modules/@tailwindcss/node": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.1.tgz", diff --git a/package.json b/package.json index 6411d6d..ff6ef50 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "devDependencies": { "@biomejs/biome": "2.4.15", "@clerk/clerk-react": "^5.61.8", + "@tabler/icons-react": "^3.45.0", "@tailwindcss/vite": "^4.3.1", "@types/inquirer": "^9.0.9", "@types/node": "^22.10.0", diff --git a/src/ui-app/components/landing/CTABanner.tsx b/src/ui-app/components/landing/CTABanner.tsx new file mode 100644 index 0000000..4b7ba1b --- /dev/null +++ b/src/ui-app/components/landing/CTABanner.tsx @@ -0,0 +1,49 @@ +import { Button } from "../ui/Button"; +import { Link } from "../ui/Link"; + +export function CTABanner() { + return ( +
+ Connect Parseable to Claude, Cursor, or any MCP-compatible agent and investigate incidents across logs, metrics, traces, and alerts — in natural language, without switching context. +
++ {desc} +
++ Connect Claude, Cursor, or any MCP-compatible agent to Parseable. + Query terabytes of logs, metrics, and traces in natural language — at + sub-second speed. +
++ These prompts work out of the box with any MCP-compatible AI client + connected to Parseable. +
++ {prompt.text} +
+ +
+ {content}
+
+ + {children} +
+ ); +} + +function InstallButton({ href, icon, label }: { href: string; icon: ReactNode; label: string; iconColor?: string }) { + return ( + + {icon} + {label} + + ); +} + +export function QuickSetup() { + const [active, setActive] = useStateclaude_desktop_config.json>,
+ <>Add the parseable entry under mcpServers using the URL {HOSTED_URL}>,
+ <>Save and restart Claude Desktop>,
+ <>Look for the hammer icon in chat — Parseable tools appear there>,
+ ].map((step, i) => (
+ {HOSTED_URL} and authenticate>,
+ <>Restart ChatGPT and look for the tools icon in chat>,
+ ].map((step, i) => (
+ /parseable connect to link your Parseable instance>,
+ <>Ask anything — @parseable show errors from api-gateway in the last 30 minutes>,
+ <>Invite the bot to alert channels to get automatic root cause analysis on every firing alert>,
+ ].map((step, i) => (
+ + Ask anything about your infrastructure directly in Slack. Query + logs, metrics, traces, and alerts in plain English — the Parseable + bot responds with real data from your stack, right in the thread. +
+
+ 🔴 P1 alert: Error
+ rate on{" "}
+
+ api-gateway
+ {" "}
+ exceeded 5% for 3 min
+
+ @parseable show me the errors from api-gateway in the last + 10 minutes +
++ Found{" "} + + 847 errors + {" "} + in the last 10 min — 94% from one route: +
+
+
+ POST /v2/ingest → 503 Service Unavailable{"\n"}upstream:
+ kafka-broker-3 (connection refused){"\n"}first seen:
+ 09:11:42 UTC
+
+
+ + Likely cause:{" "} + + kafka-broker-3 is unreachable + +
++ Ask a question in plain English. The MCP server translates it to + SQL, queries Parseable, and returns structured results — right in + your AI client. +
+| + Timestamp + | ++ Service + | ++ Level + | ++ Message + | +
|---|---|---|---|
| + {row.ts} + | ++ {row.svc} + | ++ + {row.level} + + | ++ {row.msg} + | +
+ The payment service is experiencing repeated Stripe API timeouts
+ — 4 of the 5 recent errors are
+
+ charge_stripe: timeout after 5000ms
+
+ with one connection refused.
+
+ The api-gateway is also logging upstream timeouts to + payment-service:3001, suggesting the service is either + overloaded or its Stripe connection is degraded. I can check + latency trends or recent deploys if you'd like. +
++ Use the hosted MCP server for the fastest path, or run the + open-source server locally when you need full control. +
++ Parseable runs the MCP server for you. Connect using OAuth — + no infrastructure to manage. +
++ Run the Parseable MCP server on your own machine. Full + control over credentials and config. +
++ 1. Add the Parseable MCP server +
+ +
+ {`claude mcp add --transport http parseable ${HOSTED_URL}`}
+
+ + 2. Authenticate +
+
+ /mcp
+
+ + Endpoint URL +
+ +
+ {HOSTED_URL}
+
+ + 1. Install +
+ +
+ npx -y @parseablehq/mcp
+
+ + 2. Configure +
+ +
+ {localConfig}
+
+ + 3. Connect +
+ +
+
+ claude mcp add --transport http parseable
+ https://your-instance.parseable.com/mcp
+
+
+