<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />

    <!-- Google Tag Manager -->
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','GTM-NVDZX38V');</script>
    <!-- End Google Tag Manager -->
    <link rel="icon" type="image/png" href="/logos/perception-logo-dark.png" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    
    <!-- Primary Meta Tags -->
    <title>Perception — Real-Time Digital Asset Intelligence for AI Assistants &amp; Professionals</title>
    <meta name="title" content="Perception — Real-Time Digital Asset Intelligence for AI Assistants &amp; Professionals">
    <meta name="description" content="Give your AI real-time digital asset intelligence. 1,000+ sources, sentiment-scored and entity-extracted, piped directly into Claude, ChatGPT, Gemini, and any MCP client.">

    <!-- Open Graph / Facebook -->
    <meta property="og:type" content="website">
    <meta property="og:url" content="https://perception.to/">
    <meta property="og:title" content="Perception — Real-Time Digital Asset Intelligence for AI Assistants &amp; Professionals">
    <meta property="og:description" content="Give your AI real-time digital asset intelligence. 1,000+ sources, sentiment-scored and entity-extracted, piped directly into Claude, ChatGPT, Gemini, and any MCP client.">
    <meta property="og:image" content="https://perception-og-image.fernandonikolic.workers.dev">
    <meta property="og:image:secure_url" content="https://perception-og-image.fernandonikolic.workers.dev">
    <meta property="og:image:type" content="image/png">
    <meta property="og:image:width" content="1200">
    <meta property="og:image:height" content="630">
    <meta property="og:image:alt" content="Perception — Digital Asset Intelligence for AI Assistants">

    <!-- Twitter -->
    <meta property="twitter:card" content="summary_large_image">
    <meta property="twitter:url" content="https://perception.to/">
    <meta property="twitter:title" content="Perception — Real-Time Digital Asset Intelligence for AI Assistants &amp; Professionals">
    <meta property="twitter:description" content="Give your AI real-time digital asset intelligence. 1,000+ sources, sentiment-scored and entity-extracted, piped directly into Claude, ChatGPT, Gemini, and any MCP client.">
    <meta property="twitter:image" content="https://perception-og-image.fernandonikolic.workers.dev">
    <meta property="twitter:image:alt" content="Perception — Digital Asset Intelligence for AI Assistants">

    <!-- Additional Meta Tags -->
    <meta name="keywords" content="MCP server, AI digital asset intelligence, Bitcoin sentiment API, Claude MCP, ChatGPT connector, Gemini MCP, digital asset sentiment analysis, Bitcoin media intelligence, MCP client, narrative intelligence, entity extraction, stablecoin intelligence, tokenized finance">
    <meta name="author" content="Perception">
    <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
    <meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
    <meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
    <meta name="theme-color" content="#ffffff">
    <meta name="fragment" content="!">
    <link rel="canonical" href="https://perception.to/" />
    <link rel="alternate" hreflang="en" href="https://perception.to/" />
    <link rel="sitemap" type="application/xml" href="/sitemap.xml" />
    <link rel="alternate" type="text/plain" href="/llms.txt" title="LLMs.txt" />

    <!-- DNS Prefetch for third-party services -->
    <link rel="dns-prefetch" href="//www.googletagmanager.com">
    <link rel="dns-prefetch" href="//js.stripe.com">
    <link rel="dns-prefetch" href="//app.perception.to">

    <!-- Structured data handled by middleware (seo-config.js) + React components -->

    <!-- Inter Font -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">

    <style>
      body {
        background-color: #000000;
        margin: 0;
        min-height: 100vh;
      }
      #root {
        min-height: 100vh;
        display: flex;
        flex-direction: column;
      }
    </style>
    <script>
      // Clear any cached service workers
      if ('serviceWorker' in navigator) {
        navigator.serviceWorker.getRegistrations().then(function(registrations) {
          for(let registration of registrations) {
            registration.unregister();
          }
        });
        // Clear caches
        if ('caches' in window) {
          caches.keys().then(function(names) {
            for (let name of names) {
              caches.delete(name);
            }
          });
        }
      }
    </script>

    <script>
      // WebMCP — expose site tools to AI agents running in the browser.
      // Spec: https://webmachinelearning.github.io/webmcp/
      (function () {
        if (!('modelContext' in navigator) || typeof navigator.modelContext.provideContext !== 'function') {
          return;
        }
        try {
          navigator.modelContext.provideContext({
            tools: [
              {
                name: 'get_perception_mcp_server',
                description: 'Return the Perception MCP server endpoint, transport, auth metadata, and descriptor URL so an AI client can connect and call the 19 Perception tools (search mentions, trends, sentiment, entities, analyst ratings, earnings, insider activity, regulatory, market data).',
                inputSchema: { type: 'object', properties: {}, additionalProperties: false },
                execute: async () => ({
                  name: 'Perception',
                  url: 'https://mcp.perception.to/mcp',
                  transport: 'streamable-http',
                  protocolVersion: '2025-03-26',
                  descriptor: 'https://perception.to/.well-known/mcp.json',
                  agentCard: 'https://perception.to/.well-known/agent.json',
                  skillsIndex: 'https://perception.to/.well-known/agent-skills/index.json',
                  documentation: 'https://perception.to/integrations/mcp',
                  pricing: 'https://perception.to/pricing',
                  auth: {
                    type: 'oauth2',
                    authorizationUrl: 'https://mcp.perception.to/authorize',
                    tokenUrl: 'https://mcp.perception.to/token',
                    registrationUrl: 'https://mcp.perception.to/register'
                  }
                })
              },
              {
                name: 'get_perception_api_catalog',
                description: 'Return the Perception API catalog (RFC 9727 linkset) pointing to the OpenAPI spec, API documentation, and health endpoint for the Perception REST API at api.perception.to.',
                inputSchema: { type: 'object', properties: {}, additionalProperties: false },
                execute: async () => {
                  const response = await fetch('/.well-known/api-catalog', { headers: { Accept: 'application/linkset+json' } });
                  return response.json();
                }
              },
              {
                name: 'navigate_perception',
                description: 'Navigate the current browser tab to a Perception page. Use this when the user asks to open pricing, docs, API reference, integrations, or the app.',
                inputSchema: {
                  type: 'object',
                  properties: {
                    destination: {
                      type: 'string',
                      enum: ['home', 'pricing', 'api', 'mcp', 'app', 'integrations', 'research', 'contact'],
                      description: 'Which Perception page to open.'
                    }
                  },
                  required: ['destination'],
                  additionalProperties: false
                },
                execute: async ({ destination }) => {
                  const routes = {
                    home: 'https://perception.to/',
                    pricing: 'https://perception.to/pricing',
                    api: 'https://perception.to/api',
                    mcp: 'https://perception.to/integrations/mcp',
                    app: 'https://app.perception.to/',
                    integrations: 'https://perception.to/integrations',
                    research: 'https://perception.to/research',
                    contact: 'https://perception.to/contact'
                  };
                  const url = routes[destination];
                  if (!url) return { ok: false, error: 'Unknown destination' };
                  window.location.assign(url);
                  return { ok: true, url };
                }
              }
            ]
          });
        } catch (err) {
          // WebMCP is optional — swallow errors so nothing else breaks.
        }
      })();
    </script>
    <script type="module" crossorigin src="/js/index-CTQqXUDK.js"></script>
    <link rel="stylesheet" crossorigin href="/css/index-D13Z8WdD.css">
  </head>
  <body>
    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NVDZX38V"
    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <!-- End Google Tag Manager (noscript) -->
    <div id="root"></div>
  </body>
</html>
