API Evangelist API Evangelist
API Learnings
Toolbox
API Evangelist LLC

My /me API Using Naftiko

April 7, 2026 · Kin Lane
My /me API Using Naftiko

For years I’ve been writing on API Evangelist about the idea of a personal API footprint — the idea that every individual should have a single, coherent surface representing themselves across the dozens (or hundreds) of services they touch every day. I’ve explored this with partners, sketched it at Postman, and watched the pattern slowly become normalized inside individual APIs: GitHub has /user, Slack has auth.test, Spotify has /me, Notion has /users/me, Bluesky has getProfile. Almost every platform now agrees that “me” is a high priority API resource,they just don’t agree on what “me” looks like, where it lives, or how to compose it.

With today’s alpha release of Naftiko, I can finally stop talking about this and start iterating on it for realz. So I built the /me capability, a single Naftiko 0.5 capability file that defines my personal API footprint as both an HTTP API and an MCP server, covering 84 of the services I actually depend on.

The Capability

This personal capability does three things for me that helps me standardize the concept of what a /me API does.

  1. Consumes the services I use, normalizing how I read from them — whether they speak REST, RSS, or only render HTML.
  2. Exposes an HTTP API on port 8081 with a GET /me endpoint that aggregates my identity across services.
  3. Exposes an MCP server on port 8080 with ~63 read-only tools for individual resources, plus the same aggregated me tool.

An important thing to highlight it’s read-only by design. No writes, no posts, no deletes. This is about reading my own footprint, not making changes to any of the data. this is something I’ll handle with other capabilities.

The Services

The 84 accounts split into three access patterns based on what each service actually offers:

Direct API access (35 services) — the platforms that have proper APIs with bearer-token auth and a real /me-style endpoint. GitHub, Bluesky, Discord, Slack, Notion, Dropbox, Spotify, LinkedIn, Mastodon, Stripe, PayPal, Plaid, Wise, Cloudflare, Postman, Docker Hub, Twilio, OpenAI, Fastmail, Calendly, Zoom, Canva, DocuSign, Formspree, Buttondown, Inoreader, Bitly, EasyCron, YouTube, Pinterest, SoundCloud, Etsy, Uber, Hover, G2.

RSS feeds (13 sources) — read-only content streams where the service publishes a feed but no useful personal API. API Evangelist, BBC, DZone, The Economist, Hacker News, HackerNoon, Medium, NY Times, PBS, Politico, Substack, The New Stack, Crunchbase News.

HTML pages (15 services) — the financial, travel, civic, and institutional accounts where there’s no API at all and the only way to read my own data is to scrape the page I’d otherwise log into. Amazon orders, Chase, E*TRADE, Credit Karma, Amtrak, Alaska Air, Expedia, CVS prescriptions, Extra Space, TriNet, Zillow saved homes, Ancestry, IETF, MIT, MoMA, NYPL, NY.gov.

This split is itself a statement about the state of personal APIs in 2026: about 40% of the services I use have a real API, 15% have a feed, and the remaining 45% — including most of my financial and institutional life, which will require scraping a webpage to get at my own information.

Consumes & Produces

On the consume side, each service is normalized into a Naftiko consumes namespace with one or more resources and operations. A GitHub consumes block defines the bearer auth, the /user resource, the /user/repos resource, gists, and notifications. A Bluesky consumes block defines the AT Protocol XRPC endpoints. An RSS feed consumes block uses outputRawFormat: "xml" and maps $.rss.channel.item into structured arrays of titles, links, and pub dates. An HTML consumes block uses outputRawFormat: "html" to extract structured data from a rendered page.

The point is that once a service is wrapped in a consumes block, the rest of the capability doesn’t care whether the data came from a REST API, an RSS feed, or a scraped page. Everything downstream just sees normalized JSON.

On the produce side, the capability exposes what I need to power my CLaude usage in my VSCode, desktop, and in the browser.

  • GET /me — the headline endpoint. Calls the identity endpoint of 17 services in parallel (GitHub, Bluesky, Discord, Slack, Notion, Spotify, Dropbox, LinkedIn, Mastodon, Stripe, PayPal, Cloudflare, Postman, Docker, Fastmail, OpenAI, Zoom) and returns a single JSON object keyed by service. This is my personal API footprint as one HTTP response.
  • 63 MCP tools for individual resources: get-my-repos, get-my-bluesky-feed, get-my-slack-channels, get-my-notion-pages, get-my-stripe-balance, get-my-spotify-recently-played, get-feed-hacker-news, get-my-amazon-orders, and so on. Each is a thin, read-only projection over the underlying consume.
  • An MCP account-summary prompt that takes a timeframe argument and asks for a cross-account activity summary.
  • An MCP account-index resource describing the connected accounts and their status.

Beyond Agents & Copilots

The natural assumption when you see “MCP server” is that this is a thing for Claude or Cursor or some other agent to call. And yes, it is. But I find it just as interesting when you treat your personal API footprint as a regular HTTP API that any application or CRON job can hit.

A few things this prototype /me capability offers:

  • A personal dashboard — a simple web page that hits GET /me once and renders my current state across every service I care about. No 17 separate OAuth flows in the front-end. No 17 vendor SDKs. One endpoint.
  • A personal status page — a public (or private) page generated from my own footprint, showing what I’m reading, writing, listening to, shipping, and spending — assembled from sources I control rather than from whatever each platform decides to surface.
  • Cross-service automations that aren’t agents — a cron job that pulls /me once an hour, diffs it against the previous snapshot, and writes a structured changelog. No LLM required. No prompt. Just data.
  • Personal analytics over time — because everything flows through one API, I can log responses to a database and finally answer questions like “how has my GitHub activity correlated with my Substack posting cadence over the last year?” Today that question requires writing five separate ETL scripts.
  • A backup of my own footprint — if my personal API is the canonical read interface to my digital life, then snapshotting it on a schedule is a backup of who I am across services, in a format I own.
  • Embedded use in other apps I build — any side project I write can ask “what is Kin’s current state?” without me wiring up another OAuth integration. The personal API is the integration.
  • A substrate for portability — if I ever want to leave a platform, the consumes block for that platform is also a map of what I’d need to extract. The capability is documentation as much as it is runtime.

The agents and copilots are real, and they’re definitely a consumer of this. But they’re not the reason. The reason is that I should not have to log in to 84 different websites to understand my own life, and no individual vendor is going to solve that for me. The only entity with the incentive to build a unified read view of me is me.

Naftiko Alpha Release

Until now, “personal API footprint” was a slide. Each time I wanted to actually build it, I hit the same wall: writing 84 bespoke integrations is a project, not a side project, and the second I finished one, three of the upstream APIs would change and I’d be back to maintenance hell.

What Naftiko gives me, and what made today the day I actually built this, is the declarative format where each service is a consumes block, each consume is a chunk of YAML I can edit in isolation, and the runtime handles the auth, the HTTP, the XML parsing, the HTML extraction, the MCP wiring, and the HTTP server. The capability file is ~2,000 lines, but it is 2,000 lines of declaration, not 2,000 lines of glue code. When GitHub changes its API, I edit one resource block. When I want to add a new service, I add one consumes namespace and one tool.

This is the approach I’ve been hoping for. The personal API footprint stops being a possible and starts being a file I can iterate on, push to a repo, run, and begin iterating on over time.

What is Next?

This first cut is intentionally read-only and intentionally broad — I wanted to see all 84 services in one file, even the ones where my only option is HTML scraping, because the gaps are part of the story. From here I want to:

  • Tighten the identity-bearing services so GET /me returns a clean, normalized profile schema instead of a per-service object soup.
  • Add a snapshot/diff layer so the capability can answer “what changed since last time” without an agent in the loop.
  • Start writing the next layer: the things you can build on top of a personal API once you have one.
  • Playing what is possible within Claude when I have access to all of this data on a reliable basis.

I can just run this capability locally for now. Keep iterating and playing with what is possible. Then I’ll likely deploy using a Cloudflare worker so that I can access across machines, servers, and services–like with my CRON service.

This capability represents Kin Lane. I need to think about the separation with API Evangelist. I also need to think about what the separation is with my Naftiko capabilities. This is something that Naftiko affords when it comes to the tagging and domain-driven capabilities, so I am not worried, and interested in seeing what is possible.

naftiko: "0.5"

info:
  label: "Kin Lane /me API and MCP"
  description: "Unified read-only capability providing access to my personal resources across all accounts. Exposes an /me endpoint aggregating profile and resource data, with MCP server support for agent-driven access."
  tags:
    - Personal
    - Read-Only
    - Agreggator
    - /me
  created: "2026-04-03"
  modified: "2026-04-07"

capability:

  exposes:

    # ---------------------------------------------------------------
    # HTTP API - exposes /me as a REST endpoint alongside MCP
    # ---------------------------------------------------------------
    - type: "http"
      namespace: "my-accounts-http"
      address: "0.0.0.0"
      port: 8081
      description: "Personal accounts HTTP API providing a /me endpoint for aggregated read-only profile access."
      resources:
        - name: "me"
          path: "/me"
          description: "Aggregated personal profile across all connected accounts."
          operations:
            - name: "http-get-me"
              method: "GET"
              description: "Returns aggregated identity data from all connected accounts."
              steps:
                - name: github-me
                  type: call
                  call: "github.get-me"
                - name: bluesky-me
                  type: call
                  call: "bluesky.get-profile"
                - name: discord-me
                  type: call
                  call: "discord.get-me"
                - name: slack-me
                  type: call
                  call: "slack.get-me"
                - name: notion-me
                  type: call
                  call: "notion.get-me"
                - name: spotify-me
                  type: call
                  call: "spotify.get-me"
                - name: dropbox-me
                  type: call
                  call: "dropbox.get-me"
                - name: linkedin-me
                  type: call
                  call: "linkedin.get-me"
                - name: mastodon-me
                  type: call
                  call: "mastodon.get-me"
                - name: stripe-me
                  type: call
                  call: "stripe.get-me"
                - name: paypal-me
                  type: call
                  call: "paypal.get-me"
                - name: cloudflare-me
                  type: call
                  call: "cloudflare.get-me"
                - name: postman-me
                  type: call
                  call: "postman.get-me"
                - name: docker-me
                  type: call
                  call: "docker.get-me"
                - name: fastmail-me
                  type: call
                  call: "fastmail.get-me"
                - name: openai-me
                  type: call
                  call: "openai.get-me"
                - name: zoom-me
                  type: call
                  call: "zoom.get-me"
              outputParameters:
                - name: github
                  type: object
                  mapping: ""
                - name: bluesky
                  type: object
                  mapping: ""
                - name: discord
                  type: object
                  mapping: ""
                - name: slack
                  type: object
                  mapping: ""
                - name: notion
                  type: object
                  mapping: ""
                - name: spotify
                  type: object
                  mapping: ""
                - name: dropbox
                  type: object
                  mapping: ""
                - name: linkedin
                  type: object
                  mapping: ""
                - name: mastodon
                  type: object
                  mapping: ""
                - name: stripe
                  type: object
                  mapping: ""
                - name: paypal
                  type: object
                  mapping: ""
                - name: cloudflare
                  type: object
                  mapping: ""
                - name: postman
                  type: object
                  mapping: ""
                - name: docker
                  type: object
                  mapping: ""
                - name: fastmail
                  type: object
                  mapping: ""
                - name: openai
                  type: object
                  mapping: ""
                - name: zoom
                  type: object
                  mapping: ""

    # ---------------------------------------------------------------
    # MCP Server
    # ---------------------------------------------------------------
    - type: "mcp"
      namespace: "my-accounts"
      port: 8080
      description: "Personal accounts MCP server providing read-only access to resources across all services."

      tools:

        # ---------------------------------------------------------------
        # /me - Aggregated personal profile
        # ---------------------------------------------------------------
        - name: "me"
          label: "Get My Profile"
          description: "Returns an aggregated view of my identity, profiles, and key resources across all connected accounts."
          steps:
            - name: github-me
              type: call
              call: "github.get-me"
            - name: bluesky-me
              type: call
              call: "bluesky.get-profile"
            - name: discord-me
              type: call
              call: "discord.get-me"
            - name: slack-me
              type: call
              call: "slack.get-me"
            - name: notion-me
              type: call
              call: "notion.get-me"
            - name: spotify-me
              type: call
              call: "spotify.get-me"
            - name: dropbox-me
              type: call
              call: "dropbox.get-me"
            - name: linkedin-me
              type: call
              call: "linkedin.get-me"
            - name: mastodon-me
              type: call
              call: "mastodon.get-me"
            - name: stripe-me
              type: call
              call: "stripe.get-me"
            - name: paypal-me
              type: call
              call: "paypal.get-me"
            - name: cloudflare-me
              type: call
              call: "cloudflare.get-me"
            - name: postman-me
              type: call
              call: "postman.get-me"
            - name: docker-me
              type: call
              call: "docker.get-me"
            - name: fastmail-me
              type: call
              call: "fastmail.get-me"
            - name: openai-me
              type: call
              call: "openai.get-me"
            - name: zoom-me
              type: call
              call: "zoom.get-me"
          outputParameters:
            - name: github
              type: object
              mapping: ""
            - name: bluesky
              type: object
              mapping: ""
            - name: discord
              type: object
              mapping: ""
            - name: slack
              type: object
              mapping: ""
            - name: notion
              type: object
              mapping: ""
            - name: spotify
              type: object
              mapping: ""
            - name: dropbox
              type: object
              mapping: ""
            - name: linkedin
              type: object
              mapping: ""
            - name: mastodon
              type: object
              mapping: ""
            - name: stripe
              type: object
              mapping: ""
            - name: paypal
              type: object
              mapping: ""
            - name: cloudflare
              type: object
              mapping: ""
            - name: postman
              type: object
              mapping: ""
            - name: docker
              type: object
              mapping: ""
            - name: fastmail
              type: object
              mapping: ""
            - name: openai
              type: object
              mapping: ""
            - name: zoom
              type: object
              mapping: ""

        # ---------------------------------------------------------------
        # Developer Tools
        # ---------------------------------------------------------------
        - name: "get-my-repos"
          description: "List my GitHub repositories."
          call: "github.list-my-repos"
          outputParameters:
            - name: repos
              type: array
              mapping: "$.items"

        - name: "get-my-gists"
          description: "List my GitHub gists."
          call: "github.list-my-gists"
          outputParameters:
            - name: gists
              type: array
              mapping: "$.items"

        - name: "get-my-github-notifications"
          description: "Get my GitHub notifications."
          call: "github.list-notifications"
          outputParameters:
            - name: notifications
              type: array
              mapping: "$.items"

        - name: "get-my-postman-workspaces"
          description: "List my Postman workspaces."
          call: "postman.list-workspaces"
          outputParameters:
            - name: workspaces
              type: array
              mapping: "$.workspaces"

        - name: "get-my-postman-collections"
          description: "List my Postman collections."
          call: "postman.list-collections"
          outputParameters:
            - name: collections
              type: array
              mapping: "$.collections"

        - name: "get-my-docker-repos"
          description: "List my Docker Hub repositories."
          call: "docker.list-repos"
          outputParameters:
            - name: repositories
              type: array
              mapping: "$.results"

        - name: "get-my-cloudflare-zones"
          description: "List my Cloudflare zones/domains."
          call: "cloudflare.list-zones"
          outputParameters:
            - name: zones
              type: array
              mapping: "$.result"

        - name: "get-my-cloudflare-analytics"
          description: "Get Cloudflare analytics for a zone."
          inputParameters:
            - name: zone_id
              in: body
              type: string
          call: "cloudflare.get-zone-analytics"
          with:
            zone_id: ""
          outputParameters:
            - name: analytics
              type: object
              mapping: "$.result"

        # ---------------------------------------------------------------
        # Social & Communication
        # ---------------------------------------------------------------
        - name: "get-my-bluesky-feed"
          description: "Get my Bluesky timeline."
          call: "bluesky.get-timeline"
          outputParameters:
            - name: feed
              type: array
              mapping: "$.feed"

        - name: "get-my-bluesky-notifications"
          description: "Get my Bluesky notifications."
          call: "bluesky.get-notifications"
          outputParameters:
            - name: notifications
              type: array
              mapping: "$.notifications"

        - name: "get-my-discord-guilds"
          description: "List my Discord servers."
          call: "discord.list-guilds"
          outputParameters:
            - name: guilds
              type: array
              mapping: "$.items"

        - name: "get-my-slack-channels"
          description: "List my Slack channels."
          call: "slack.list-channels"
          outputParameters:
            - name: channels
              type: array
              mapping: "$.channels"

        - name: "get-my-slack-messages"
          description: "Get recent messages from a Slack channel."
          inputParameters:
            - name: channel
              in: body
              type: string
          call: "slack.get-channel-history"
          with:
            channel: ""
          outputParameters:
            - name: messages
              type: array
              mapping: "$.messages"

        - name: "get-my-mastodon-timeline"
          description: "Get my Mastodon home timeline."
          call: "mastodon.get-timeline"
          outputParameters:
            - name: statuses
              type: array
              mapping: "$.items"

        - name: "get-my-mastodon-notifications"
          description: "Get my Mastodon notifications."
          call: "mastodon.get-notifications"
          outputParameters:
            - name: notifications
              type: array
              mapping: "$.items"

        - name: "get-my-reddit-feed"
          description: "Get my Reddit front page feed."
          call: "reddit.get-my-feed"
          outputParameters:
            - name: posts
              type: array
              mapping: "$.data.children"

        - name: "get-my-reddit-saved"
          description: "Get my saved Reddit posts."
          call: "reddit.get-saved"
          outputParameters:
            - name: saved
              type: array
              mapping: "$.data.children"

        # ---------------------------------------------------------------
        # Content & Productivity
        # ---------------------------------------------------------------
        - name: "get-my-notion-pages"
          description: "Search my Notion workspace."
          inputParameters:
            - name: query
              in: body
              type: string
          call: "notion.search"
          with:
            query: ""
          outputParameters:
            - name: results
              type: array
              mapping: "$.results"

        - name: "get-my-notion-databases"
          description: "List my Notion databases."
          call: "notion.search-databases"
          outputParameters:
            - name: databases
              type: array
              mapping: "$.results"

        - name: "get-my-dropbox-files"
          description: "List files in my Dropbox."
          inputParameters:
            - name: path
              in: body
              type: string
          call: "dropbox.list-folder"
          with:
            path: ""
          outputParameters:
            - name: entries
              type: array
              mapping: "$.entries"

        - name: "get-my-ghost-posts"
          description: "List my Ghost blog posts."
          call: "ghost.list-posts"
          outputParameters:
            - name: posts
              type: array
              mapping: "$.posts"

        - name: "get-my-buttondown-subscribers"
          description: "List my Buttondown newsletter subscribers."
          call: "buttondown.list-subscribers"
          outputParameters:
            - name: subscribers
              type: array
              mapping: "$.results"

        - name: "get-my-buttondown-emails"
          description: "List my Buttondown sent emails."
          call: "buttondown.list-emails"
          outputParameters:
            - name: emails
              type: array
              mapping: "$.results"

        - name: "get-my-canva-designs"
          description: "List my Canva designs."
          call: "canva.list-designs"
          outputParameters:
            - name: designs
              type: array
              mapping: "$.items"

        - name: "get-my-docusign-envelopes"
          description: "List my DocuSign envelopes."
          call: "docusign.list-envelopes"
          outputParameters:
            - name: envelopes
              type: array
              mapping: "$.envelopes"

        - name: "get-my-formspree-submissions"
          description: "List my Formspree form submissions."
          inputParameters:
            - name: form_id
              in: body
              type: string
          call: "formspree.list-submissions"
          with:
            form_id: ""
          outputParameters:
            - name: submissions
              type: array
              mapping: "$.submissions"

        # ---------------------------------------------------------------
        # Email & Calendar
        # ---------------------------------------------------------------
        - name: "get-my-fastmail-mailboxes"
          description: "List my Fastmail mailboxes."
          call: "fastmail.list-mailboxes"
          outputParameters:
            - name: mailboxes
              type: array
              mapping: "$.list"

        - name: "get-my-calendly-events"
          description: "List my upcoming Calendly events."
          call: "calendly.list-events"
          outputParameters:
            - name: events
              type: array
              mapping: "$.collection"

        - name: "get-my-zoom-meetings"
          description: "List my upcoming Zoom meetings."
          call: "zoom.list-meetings"
          outputParameters:
            - name: meetings
              type: array
              mapping: "$.meetings"

        # ---------------------------------------------------------------
        # Finance & Payments
        # ---------------------------------------------------------------
        - name: "get-my-stripe-balance"
          description: "Get my Stripe account balance."
          call: "stripe.get-balance"
          outputParameters:
            - name: balance
              type: object
              mapping: "$"

        - name: "get-my-stripe-charges"
          description: "List recent Stripe charges."
          call: "stripe.list-charges"
          outputParameters:
            - name: charges
              type: array
              mapping: "$.data"

        - name: "get-my-paypal-transactions"
          description: "List recent PayPal transactions."
          call: "paypal.list-transactions"
          outputParameters:
            - name: transactions
              type: array
              mapping: "$.transaction_details"

        - name: "get-my-plaid-accounts"
          description: "List my linked Plaid financial accounts."
          call: "plaid.get-accounts"
          outputParameters:
            - name: accounts
              type: array
              mapping: "$.accounts"

        - name: "get-my-wise-balances"
          description: "Get my Wise multi-currency balances."
          call: "wise.get-balances"
          outputParameters:
            - name: balances
              type: array
              mapping: "$.items"

        # ---------------------------------------------------------------
        # Media & Entertainment
        # ---------------------------------------------------------------
        - name: "get-my-spotify-playlists"
          description: "List my Spotify playlists."
          call: "spotify.list-playlists"
          outputParameters:
            - name: playlists
              type: array
              mapping: "$.items"

        - name: "get-my-spotify-recently-played"
          description: "Get my recently played Spotify tracks."
          call: "spotify.get-recently-played"
          outputParameters:
            - name: items
              type: array
              mapping: "$.items"

        - name: "get-my-youtube-subscriptions"
          description: "List my YouTube subscriptions."
          call: "youtube.list-subscriptions"
          outputParameters:
            - name: subscriptions
              type: array
              mapping: "$.items"

        - name: "get-my-youtube-playlists"
          description: "List my YouTube playlists."
          call: "youtube.list-playlists"
          outputParameters:
            - name: playlists
              type: array
              mapping: "$.items"

        - name: "get-my-pinterest-boards"
          description: "List my Pinterest boards."
          call: "pinterest.list-boards"
          outputParameters:
            - name: boards
              type: array
              mapping: "$.items"

        - name: "get-my-soundcloud-tracks"
          description: "List my SoundCloud tracks and likes."
          call: "soundcloud.get-my-tracks"
          outputParameters:
            - name: tracks
              type: array
              mapping: "$.collection"

        # ---------------------------------------------------------------
        # URL & Links
        # ---------------------------------------------------------------
        - name: "get-my-bitly-links"
          description: "List my Bitly shortened links."
          call: "bitly.list-links"
          outputParameters:
            - name: links
              type: array
              mapping: "$.links"

        # ---------------------------------------------------------------
        # AI Services
        # ---------------------------------------------------------------
        - name: "get-my-openai-models"
          description: "List available OpenAI models."
          call: "openai.list-models"
          outputParameters:
            - name: models
              type: array
              mapping: "$.data"

        - name: "get-my-openai-usage"
          description: "Get my OpenAI API usage."
          call: "openai.get-usage"
          outputParameters:
            - name: usage
              type: object
              mapping: "$"

        # ---------------------------------------------------------------
        # RSS Feed Reader
        # ---------------------------------------------------------------
        - name: "get-my-inoreader-subscriptions"
          description: "List my Inoreader RSS subscriptions."
          call: "inoreader.list-subscriptions"
          outputParameters:
            - name: subscriptions
              type: array
              mapping: "$.subscriptions"

        - name: "get-my-inoreader-unread"
          description: "Get unread items from Inoreader."
          call: "inoreader.get-unread"
          outputParameters:
            - name: items
              type: array
              mapping: "$.items"

        # ---------------------------------------------------------------
        # Scheduling & Automation
        # ---------------------------------------------------------------
        - name: "get-my-easycron-jobs"
          description: "List my EasyCron scheduled jobs."
          call: "easycron.list-jobs"
          outputParameters:
            - name: jobs
              type: array
              mapping: "$.cron_jobs"

        # ---------------------------------------------------------------
        # Shopping & Marketplace
        # ---------------------------------------------------------------
        - name: "get-my-etsy-listings"
          description: "List my Etsy shop listings."
          call: "etsy.list-my-listings"
          outputParameters:
            - name: listings
              type: array
              mapping: "$.results"

        - name: "get-my-amazon-orders"
          description: "Get recent Amazon order status."
          call: "amazon-html.get-orders"
          outputParameters:
            - name: orders
              type: array
              mapping: "$.orders"

        # ---------------------------------------------------------------
        # Travel & Transportation
        # ---------------------------------------------------------------
        - name: "get-my-uber-trips"
          description: "Get my recent Uber trip history."
          call: "uber.get-trip-history"
          outputParameters:
            - name: trips
              type: array
              mapping: "$.trips"

        - name: "get-my-expedia-trips"
          description: "Get my Expedia trip itineraries."
          call: "expedia-html.get-trips"
          outputParameters:
            - name: trips
              type: array
              mapping: "$.trips"

        # ---------------------------------------------------------------
        # Domains & Hosting
        # ---------------------------------------------------------------
        - name: "get-my-hover-domains"
          description: "List my Hover domain registrations."
          call: "hover.list-domains"
          outputParameters:
            - name: domains
              type: array
              mapping: "$.domains"

        # ---------------------------------------------------------------
        # RSS Feeds - News, Tech & Content
        # ---------------------------------------------------------------
        - name: "get-feed-api-evangelist"
          description: "Get latest API Evangelist posts via RSS."
          call: "rss-feeds.api-evangelist"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-bbc"
          description: "Get latest BBC news via RSS."
          call: "rss-feeds.bbc-news"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-dzone"
          description: "Get latest DZone articles via RSS."
          call: "rss-feeds.dzone"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-economist"
          description: "Get latest Economist articles via RSS."
          call: "rss-feeds.economist"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-hacker-news"
          description: "Get top Hacker News stories via RSS."
          call: "rss-feeds.hacker-news"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-hackernoon"
          description: "Get latest HackerNoon articles via RSS."
          call: "rss-feeds.hackernoon"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-medium"
          description: "Get latest Medium articles via RSS."
          call: "rss-feeds.medium"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-nytimes"
          description: "Get latest NY Times headlines via RSS."
          call: "rss-feeds.nytimes"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-pbs"
          description: "Get latest PBS news via RSS."
          call: "rss-feeds.pbs"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-politico"
          description: "Get latest Politico articles via RSS."
          call: "rss-feeds.politico"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-substack"
          description: "Get latest Substack newsletter posts via RSS."
          call: "rss-feeds.substack"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-the-new-stack"
          description: "Get latest The New Stack articles via RSS."
          call: "rss-feeds.the-new-stack"
          outputParameters:
            - name: items
              type: array
              mapping: ""

        - name: "get-feed-crunchbase"
          description: "Get latest Crunchbase news via RSS."
          call: "rss-feeds.crunchbase"
          outputParameters:
            - name: items
              type: array
              mapping: ""

      # ---------------------------------------------------------------
      # MCP Resources - Static references
      # ---------------------------------------------------------------
      resources:
        - name: "account-index"
          label: "Account Index"
          uri: "data://my-accounts/index"
          description: "Index of all connected personal accounts and their status."
          mimeType: "application/json"

      prompts:
        - name: "account-summary"
          label: "Account Summary"
          description: "Generate a summary of activity across my accounts."
          arguments:
            - name: "timeframe"
              description: "Time period to summarize (e.g. today, this-week, this-month)"
              required: false
          template:
            - role: "user"
              content: "Summarize my activity across all connected accounts for . Include notifications, messages, recent content, and any items needing attention."

  # ===================================================================
  # CONSUMES - API Services
  # ===================================================================

  consumes:

    # -----------------------------------------------------------------
    # GitHub
    # -----------------------------------------------------------------
    - namespace: "github"
      type: "http"
      baseUri: "https://api.github.com"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "github_token"
          in: "environment"
        - name: "Accept"
          in: "header"
          value: "application/vnd.github+json"
      resources:
        - name: "me"
          path: "/user"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: login
                  type: string
                  value: "$.login"
                - name: name
                  type: string
                  value: "$.name"
                - name: bio
                  type: string
                  value: "$.bio"
                - name: public_repos
                  type: integer
                  value: "$.public_repos"
        - name: "my-repos"
          path: "/user/repos"
          operations:
            - name: "list-my-repos"
              method: "GET"
              inputParameters:
                - name: sort
                  in: query
                  value: "updated"
                - name: per_page
                  in: query
                  value: "30"
              outputParameters:
                - name: items
                  type: array
                  value: "$"
        - name: "my-gists"
          path: "/gists"
          operations:
            - name: "list-my-gists"
              method: "GET"
              outputParameters:
                - name: items
                  type: array
                  value: "$"
        - name: "notifications"
          path: "/notifications"
          operations:
            - name: "list-notifications"
              method: "GET"
              outputParameters:
                - name: items
                  type: array
                  value: "$"

    # -----------------------------------------------------------------
    # Bluesky (AT Protocol)
    # -----------------------------------------------------------------
    - namespace: "bluesky"
      type: "http"
      baseUri: "https://bsky.social/xrpc"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "bluesky_token"
          in: "environment"
      resources:
        - name: "profile"
          path: "/app.bsky.actor.getProfile"
          operations:
            - name: "get-profile"
              method: "GET"
              inputParameters:
                - name: actor
                  in: query
              outputParameters:
                - name: handle
                  type: string
                  value: "$.handle"
                - name: displayName
                  type: string
                  value: "$.displayName"
                - name: followersCount
                  type: integer
                  value: "$.followersCount"
        - name: "timeline"
          path: "/app.bsky.feed.getTimeline"
          operations:
            - name: "get-timeline"
              method: "GET"
              outputParameters:
                - name: feed
                  type: array
                  value: "$.feed"
        - name: "notifications"
          path: "/app.bsky.notification.listNotifications"
          operations:
            - name: "get-notifications"
              method: "GET"
              outputParameters:
                - name: notifications
                  type: array
                  value: "$.notifications"

    # -----------------------------------------------------------------
    # Discord
    # -----------------------------------------------------------------
    - namespace: "discord"
      type: "http"
      baseUri: "https://discord.com/api/v10"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "discord_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/users/@me"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: username
                  type: string
                  value: "$.username"
                - name: email
                  type: string
                  value: "$.email"
        - name: "guilds"
          path: "/users/@me/guilds"
          operations:
            - name: "list-guilds"
              method: "GET"
              outputParameters:
                - name: items
                  type: array
                  value: "$"

    # -----------------------------------------------------------------
    # Slack
    # -----------------------------------------------------------------
    - namespace: "slack"
      type: "http"
      baseUri: "https://slack.com/api"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "slack_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/auth.test"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: user
                  type: string
                  value: "$.user"
                - name: team
                  type: string
                  value: "$.team"
        - name: "channels"
          path: "/conversations.list"
          operations:
            - name: "list-channels"
              method: "GET"
              outputParameters:
                - name: channels
                  type: array
                  value: "$.channels"
        - name: "history"
          path: "/conversations.history"
          inputParameters:
            - name: channel
              in: query
          operations:
            - name: "get-channel-history"
              method: "GET"
              outputParameters:
                - name: messages
                  type: array
                  value: "$.messages"

    # -----------------------------------------------------------------
    # Notion
    # -----------------------------------------------------------------
    - namespace: "notion"
      type: "http"
      baseUri: "https://api.notion.com/v1"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "notion_token"
          in: "environment"
        - name: "Notion-Version"
          in: "header"
          value: "2022-06-28"
      resources:
        - name: "me"
          path: "/users/me"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: name
                  type: string
                  value: "$.name"
                - name: type
                  type: string
                  value: "$.type"
        - name: "search"
          path: "/search"
          operations:
            - name: "search"
              method: "POST"
              inputParameters:
                - name: query
                  in: body
              body:
                type: "json"
                data:
                  query: ""
              outputParameters:
                - name: results
                  type: array
                  value: "$.results"
            - name: "search-databases"
              method: "POST"
              body:
                type: "json"
                data:
                  filter:
                    property: "object"
                    value: "database"
              outputParameters:
                - name: results
                  type: array
                  value: "$.results"

    # -----------------------------------------------------------------
    # Spotify
    # -----------------------------------------------------------------
    - namespace: "spotify"
      type: "http"
      baseUri: "https://api.spotify.com/v1"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "spotify_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/me"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: display_name
                  type: string
                  value: "$.display_name"
                - name: email
                  type: string
                  value: "$.email"
        - name: "playlists"
          path: "/me/playlists"
          operations:
            - name: "list-playlists"
              method: "GET"
              outputParameters:
                - name: items
                  type: array
                  value: "$.items"
        - name: "recently-played"
          path: "/me/player/recently-played"
          operations:
            - name: "get-recently-played"
              method: "GET"
              outputParameters:
                - name: items
                  type: array
                  value: "$.items"

    # -----------------------------------------------------------------
    # Dropbox
    # -----------------------------------------------------------------
    - namespace: "dropbox"
      type: "http"
      baseUri: "https://api.dropboxapi.com/2"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "dropbox_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/users/get_current_account"
          operations:
            - name: "get-me"
              method: "POST"
              outputParameters:
                - name: name
                  type: string
                  value: "$.name.display_name"
                - name: email
                  type: string
                  value: "$.email"
        - name: "files"
          path: "/files/list_folder"
          operations:
            - name: "list-folder"
              method: "POST"
              inputParameters:
                - name: path
                  in: body
              body:
                type: "json"
                data:
                  path: ""
              outputParameters:
                - name: entries
                  type: array
                  value: "$.entries"

    # -----------------------------------------------------------------
    # LinkedIn
    # -----------------------------------------------------------------
    - namespace: "linkedin"
      type: "http"
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "linkedin_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/me"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: firstName
                  type: string
                  value: "$.localizedFirstName"
                - name: lastName
                  type: string
                  value: "$.localizedLastName"

    # -----------------------------------------------------------------
    # Mastodon (kinlane.com)
    # -----------------------------------------------------------------
    - namespace: "mastodon"
      type: "http"
      baseUri: "https://mastodon.social/api/v1"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "mastodon_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/accounts/verify_credentials"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: username
                  type: string
                  value: "$.username"
                - name: display_name
                  type: string
                  value: "$.display_name"
                - name: followers_count
                  type: integer
                  value: "$.followers_count"
        - name: "home-timeline"
          path: "/timelines/home"
          operations:
            - name: "get-timeline"
              method: "GET"
              outputParameters:
                - name: items
                  type: array
                  value: "$"
        - name: "notifications"
          path: "/notifications"
          operations:
            - name: "get-notifications"
              method: "GET"
              outputParameters:
                - name: items
                  type: array
                  value: "$"

    # -----------------------------------------------------------------
    # Reddit
    # -----------------------------------------------------------------
    - namespace: "reddit"
      type: "http"
      baseUri: "https://oauth.reddit.com"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "reddit_token"
          in: "environment"
      resources:
        - name: "my-feed"
          path: "/best"
          operations:
            - name: "get-my-feed"
              method: "GET"
              outputParameters:
                - name: data
                  type: object
                  value: "$.data"
        - name: "saved"
          path: "/user/me/saved"
          operations:
            - name: "get-saved"
              method: "GET"
              outputParameters:
                - name: data
                  type: object
                  value: "$.data"

    # -----------------------------------------------------------------
    # Stripe
    # -----------------------------------------------------------------
    - namespace: "stripe"
      type: "http"
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "stripe_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/account"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: id
                  type: string
                  value: "$.id"
                - name: business_profile
                  type: object
                  value: "$.business_profile"
        - name: "balance"
          path: "/balance"
          operations:
            - name: "get-balance"
              method: "GET"
              outputParameters:
                - name: available
                  type: array
                  value: "$.available"
        - name: "charges"
          path: "/charges"
          operations:
            - name: "list-charges"
              method: "GET"
              inputParameters:
                - name: limit
                  in: query
                  value: "25"
              outputParameters:
                - name: data
                  type: array
                  value: "$.data"

    # -----------------------------------------------------------------
    # PayPal
    # -----------------------------------------------------------------
    - namespace: "paypal"
      type: "http"
      baseUri: "https://api-m.paypal.com/v1"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "paypal_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/identity/oauth2/userinfo"
          inputParameters:
            - name: schema
              in: query
              value: "paypalv1.1"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: name
                  type: string
                  value: "$.name"
                - name: emails
                  type: array
                  value: "$.emails"
        - name: "transactions"
          path: "/reporting/transactions"
          operations:
            - name: "list-transactions"
              method: "GET"
              outputParameters:
                - name: transaction_details
                  type: array
                  value: "$.transaction_details"

    # -----------------------------------------------------------------
    # Plaid
    # -----------------------------------------------------------------
    - namespace: "plaid"
      type: "http"
      baseUri: "https://production.plaid.com"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "plaid_token"
          in: "environment"
      resources:
        - name: "accounts"
          path: "/accounts/get"
          operations:
            - name: "get-accounts"
              method: "POST"
              body:
                type: "json"
                data:
                  client_id: ""
                  secret: ""
                  access_token: ""
              outputParameters:
                - name: accounts
                  type: array
                  value: "$.accounts"

    # -----------------------------------------------------------------
    # Wise
    # -----------------------------------------------------------------
    - namespace: "wise"
      type: "http"
      baseUri: "https://api.wise.com/v4"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "wise_token"
          in: "environment"
      resources:
        - name: "balances"
          path: "/profiles//balances"
          inputParameters:
            - name: profile_id
              in: path
          operations:
            - name: "get-balances"
              method: "GET"
              inputParameters:
                - name: types
                  in: query
                  value: "STANDARD"
              outputParameters:
                - name: items
                  type: array
                  value: "$"

    # -----------------------------------------------------------------
    # Cloudflare
    # -----------------------------------------------------------------
    - namespace: "cloudflare"
      type: "http"
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "cloudflare_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/user"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: email
                  type: string
                  value: "$.result.email"
                - name: username
                  type: string
                  value: "$.result.username"
        - name: "zones"
          path: "/zones"
          operations:
            - name: "list-zones"
              method: "GET"
              outputParameters:
                - name: result
                  type: array
                  value: "$.result"
        - name: "zone-analytics"
          path: "/zones//analytics/dashboard"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: "get-zone-analytics"
              method: "GET"
              outputParameters:
                - name: result
                  type: object
                  value: "$.result"

    # -----------------------------------------------------------------
    # Postman
    # -----------------------------------------------------------------
    - namespace: "postman"
      type: "http"
      baseUri: "https://api.getpostman.com"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "postman_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/me"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: user
                  type: object
                  value: "$.user"
        - name: "workspaces"
          path: "/workspaces"
          operations:
            - name: "list-workspaces"
              method: "GET"
              outputParameters:
                - name: workspaces
                  type: array
                  value: "$.workspaces"
        - name: "collections"
          path: "/collections"
          operations:
            - name: "list-collections"
              method: "GET"
              outputParameters:
                - name: collections
                  type: array
                  value: "$.collections"

    # -----------------------------------------------------------------
    # Docker Hub
    # -----------------------------------------------------------------
    - namespace: "docker"
      type: "http"
      baseUri: "https://hub.docker.com/v2"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "docker_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/user"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: username
                  type: string
                  value: "$.username"
        - name: "repos"
          path: "/repositories/"
          inputParameters:
            - name: username
              in: path
          operations:
            - name: "list-repos"
              method: "GET"
              outputParameters:
                - name: results
                  type: array
                  value: "$.results"

    # -----------------------------------------------------------------
    # Twilio
    # -----------------------------------------------------------------
    - namespace: "twilio"
      type: "http"
      baseUri: "https://api.twilio.com/2010-04-01"
      authentication:
        type: "basic"
        username: ""
        password: ""
      inputParameters:
        - name: "twilio_sid"
          in: "environment"
        - name: "twilio_token"
          in: "environment"
      resources:
        - name: "account"
          path: "/Accounts/.json"
          operations:
            - name: "get-account"
              method: "GET"
              outputParameters:
                - name: friendly_name
                  type: string
                  value: "$.friendly_name"
                - name: status
                  type: string
                  value: "$.status"
        - name: "messages"
          path: "/Accounts//Messages.json"
          operations:
            - name: "list-messages"
              method: "GET"
              outputParameters:
                - name: messages
                  type: array
                  value: "$.messages"

    # -----------------------------------------------------------------
    # OpenAI
    # -----------------------------------------------------------------
    - namespace: "openai"
      type: "http"
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "openai_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/me"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: user
                  type: object
                  value: "$"
        - name: "models"
          path: "/models"
          operations:
            - name: "list-models"
              method: "GET"
              outputParameters:
                - name: data
                  type: array
                  value: "$.data"
        - name: "usage"
          path: "/usage"
          operations:
            - name: "get-usage"
              method: "GET"
              outputParameters:
                - name: usage
                  type: object
                  value: "$"

    # -----------------------------------------------------------------
    # Fastmail (JMAP)
    # -----------------------------------------------------------------
    - namespace: "fastmail"
      type: "http"
      baseUri: "https://api.fastmail.com/jmap/api"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "fastmail_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/.well-known/jmap"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: username
                  type: string
                  value: "$.username"
                - name: accounts
                  type: object
                  value: "$.accounts"
        - name: "mailboxes"
          path: "/"
          operations:
            - name: "list-mailboxes"
              method: "POST"
              body:
                type: "json"
                data:
                  using: ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"]
                  methodCalls:
                    - ["Mailbox/get", {"accountId": ""}, "0"]
              outputParameters:
                - name: list
                  type: array
                  value: "$.methodResponses[0][1].list"

    # -----------------------------------------------------------------
    # Calendly
    # -----------------------------------------------------------------
    - namespace: "calendly"
      type: "http"
      baseUri: "https://api.calendly.com"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "calendly_token"
          in: "environment"
      resources:
        - name: "events"
          path: "/scheduled_events"
          operations:
            - name: "list-events"
              method: "GET"
              inputParameters:
                - name: status
                  in: query
                  value: "active"
              outputParameters:
                - name: collection
                  type: array
                  value: "$.collection"

    # -----------------------------------------------------------------
    # Zoom
    # -----------------------------------------------------------------
    - namespace: "zoom"
      type: "http"
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "zoom_token"
          in: "environment"
      resources:
        - name: "me"
          path: "/users/me"
          operations:
            - name: "get-me"
              method: "GET"
              outputParameters:
                - name: email
                  type: string
                  value: "$.email"
                - name: display_name
                  type: string
                  value: "$.display_name"
        - name: "meetings"
          path: "/users/me/meetings"
          operations:
            - name: "list-meetings"
              method: "GET"
              outputParameters:
                - name: meetings
                  type: array
                  value: "$.meetings"

    # -----------------------------------------------------------------
    # Canva
    # -----------------------------------------------------------------
    - namespace: "canva"
      type: "http"
      baseUri: "https://api.canva.com/rest/v1"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "canva_token"
          in: "environment"
      resources:
        - name: "designs"
          path: "/designs"
          operations:
            - name: "list-designs"
              method: "GET"
              outputParameters:
                - name: items
                  type: array
                  value: "$.items"

    # -----------------------------------------------------------------
    # DocuSign
    # -----------------------------------------------------------------
    - namespace: "docusign"
      type: "http"
      baseUri: "https://www.docusign.net/restapi/v2.1"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "docusign_token"
          in: "environment"
      resources:
        - name: "envelopes"
          path: "/accounts//envelopes"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: "list-envelopes"
              method: "GET"
              inputParameters:
                - name: from_date
                  in: query
              outputParameters:
                - name: envelopes
                  type: array
                  value: "$.envelopes"

    # -----------------------------------------------------------------
    # Formspree
    # -----------------------------------------------------------------
    - namespace: "formspree"
      type: "http"
      baseUri: "https://formspree.io/api/0"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "formspree_token"
          in: "environment"
      resources:
        - name: "submissions"
          path: "/forms//submissions"
          inputParameters:
            - name: form_id
              in: path
          operations:
            - name: "list-submissions"
              method: "GET"
              outputParameters:
                - name: submissions
                  type: array
                  value: "$.submissions"

    # -----------------------------------------------------------------
    # Buttondown
    # -----------------------------------------------------------------
    - namespace: "buttondown"
      type: "http"
      baseUri: "https://api.buttondown.com/v1"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "buttondown_token"
          in: "environment"
      resources:
        - name: "subscribers"
          path: "/subscribers"
          operations:
            - name: "list-subscribers"
              method: "GET"
              outputParameters:
                - name: results
                  type: array
                  value: "$.results"
        - name: "emails"
          path: "/emails"
          operations:
            - name: "list-emails"
              method: "GET"
              outputParameters:
                - name: results
                  type: array
                  value: "$.results"

    # -----------------------------------------------------------------
    # Inoreader
    # -----------------------------------------------------------------
    - namespace: "inoreader"
      type: "http"
      baseUri: "https://www.inoreader.com/reader/api/0"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "inoreader_token"
          in: "environment"
      resources:
        - name: "subscriptions"
          path: "/subscription/list"
          operations:
            - name: "list-subscriptions"
              method: "GET"
              outputParameters:
                - name: subscriptions
                  type: array
                  value: "$.subscriptions"
        - name: "unread"
          path: "/stream/contents/user/-/state/com.google/reading-list"
          operations:
            - name: "get-unread"
              method: "GET"
              inputParameters:
                - name: n
                  in: query
                  value: "50"
                - name: xt
                  in: query
                  value: "user/-/state/com.google/read"
              outputParameters:
                - name: items
                  type: array
                  value: "$.items"

    # -----------------------------------------------------------------
    # Bitly
    # -----------------------------------------------------------------
    - namespace: "bitly"
      type: "http"
      baseUri: "https://api-ssl.bitly.com/v4"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "bitly_token"
          in: "environment"
      resources:
        - name: "links"
          path: "/bitlinks"
          operations:
            - name: "list-links"
              method: "GET"
              outputParameters:
                - name: links
                  type: array
                  value: "$.links"

    # -----------------------------------------------------------------
    # EasyCron
    # -----------------------------------------------------------------
    - namespace: "easycron"
      type: "http"
      baseUri: "https://www.easycron.com/rest"
      resources:
        - name: "jobs"
          path: "/list"
          inputParameters:
            - name: token
              in: query
              value: ""
          operations:
            - name: "list-jobs"
              method: "GET"
              outputParameters:
                - name: cron_jobs
                  type: array
                  value: "$.cron_jobs"

    # -----------------------------------------------------------------
    # YouTube Data API
    # -----------------------------------------------------------------
    - namespace: "youtube"
      type: "http"
      baseUri: "https://www.googleapis.com/youtube/v3"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "google_token"
          in: "environment"
      resources:
        - name: "subscriptions"
          path: "/subscriptions"
          operations:
            - name: "list-subscriptions"
              method: "GET"
              inputParameters:
                - name: part
                  in: query
                  value: "snippet"
                - name: mine
                  in: query
                  value: "true"
              outputParameters:
                - name: items
                  type: array
                  value: "$.items"
        - name: "playlists"
          path: "/playlists"
          operations:
            - name: "list-playlists"
              method: "GET"
              inputParameters:
                - name: part
                  in: query
                  value: "snippet"
                - name: mine
                  in: query
                  value: "true"
              outputParameters:
                - name: items
                  type: array
                  value: "$.items"

    # -----------------------------------------------------------------
    # Pinterest
    # -----------------------------------------------------------------
    - namespace: "pinterest"
      type: "http"
      baseUri: "https://api.pinterest.com/v5"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "pinterest_token"
          in: "environment"
      resources:
        - name: "boards"
          path: "/boards"
          operations:
            - name: "list-boards"
              method: "GET"
              outputParameters:
                - name: items
                  type: array
                  value: "$.items"

    # -----------------------------------------------------------------
    # SoundCloud
    # -----------------------------------------------------------------
    - namespace: "soundcloud"
      type: "http"
      baseUri: "https://api.soundcloud.com"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "soundcloud_token"
          in: "environment"
      resources:
        - name: "my-tracks"
          path: "/me/tracks"
          operations:
            - name: "get-my-tracks"
              method: "GET"
              outputParameters:
                - name: collection
                  type: array
                  value: "$.collection"

    # -----------------------------------------------------------------
    # Etsy
    # -----------------------------------------------------------------
    - namespace: "etsy"
      type: "http"
      baseUri: "https://openapi.etsy.com/v3"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "etsy_token"
          in: "environment"
        - name: "x-api-key"
          in: "header"
          value: ""
      resources:
        - name: "my-listings"
          path: "/application/shops//listings/active"
          inputParameters:
            - name: shop_id
              in: path
          operations:
            - name: "list-my-listings"
              method: "GET"
              outputParameters:
                - name: results
                  type: array
                  value: "$.results"

    # -----------------------------------------------------------------
    # Uber
    # -----------------------------------------------------------------
    - namespace: "uber"
      type: "http"
      baseUri: "https://api.uber.com/v1.2"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "uber_token"
          in: "environment"
      resources:
        - name: "history"
          path: "/history"
          operations:
            - name: "get-trip-history"
              method: "GET"
              outputParameters:
                - name: trips
                  type: array
                  value: "$.history"

    # -----------------------------------------------------------------
    # Hover
    # -----------------------------------------------------------------
    - namespace: "hover"
      type: "http"
      baseUri: "https://www.hover.com/api"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "hover_token"
          in: "environment"
      resources:
        - name: "domains"
          path: "/domains"
          operations:
            - name: "list-domains"
              method: "GET"
              outputParameters:
                - name: domains
                  type: array
                  value: "$.domains"

    # -----------------------------------------------------------------
    # G2 (Company Profiles)
    # -----------------------------------------------------------------
    - namespace: "g2"
      type: "http"
      baseUri: "https://data.g2.com/api/v1"
      authentication:
        type: "bearer"
        token: ""
      inputParameters:
        - name: "g2_token"
          in: "environment"
      resources:
        - name: "products"
          path: "/products"
          operations:
            - name: "list-products"
              method: "GET"
              outputParameters:
                - name: products
                  type: array
                  value: "$.data"

    # ===================================================================
    # CONSUMES - RSS Feeds (Read-Only)
    # ===================================================================
    - namespace: "rss-feeds"
      type: "http"
      resources:
        - name: "api-evangelist"
          path: "/"
          baseUri: "https://apievangelist.com/feed.xml"
          operations:
            - name: "api-evangelist"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: api-evangelist-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"
                    - name: description
                      type: string
                      mapping: "$.description"

        - name: "bbc"
          path: "/"
          baseUri: "https://feeds.bbci.co.uk/news/rss.xml"
          operations:
            - name: "bbc-news"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: bbc-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"

        - name: "dzone"
          path: "/"
          baseUri: "https://feeds.dzone.com/home"
          operations:
            - name: "dzone"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: dzone-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"

        - name: "economist"
          path: "/"
          baseUri: "https://www.economist.com/rss"
          operations:
            - name: "economist"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: economist-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"

        - name: "hacker-news"
          path: "/"
          baseUri: "https://hnrss.org/frontpage"
          operations:
            - name: "hacker-news"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: hn-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: comments
                      type: string
                      mapping: "$.comments"

        - name: "hackernoon"
          path: "/"
          baseUri: "https://hackernoon.com/feed"
          operations:
            - name: "hackernoon"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: hackernoon-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"

        - name: "medium"
          path: "/"
          baseUri: "https://medium.com/feed/@kinlane"
          operations:
            - name: "medium"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: medium-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"

        - name: "nytimes"
          path: "/"
          baseUri: "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml"
          operations:
            - name: "nytimes"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: nytimes-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"

        - name: "pbs"
          path: "/"
          baseUri: "https://www.pbs.org/newshour/feeds/rss/headlines"
          operations:
            - name: "pbs"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: pbs-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"

        - name: "politico"
          path: "/"
          baseUri: "https://rss.politico.com/politics-news.xml"
          operations:
            - name: "politico"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: politico-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"

        - name: "substack"
          path: "/"
          baseUri: "https://kinlane.substack.com/feed"
          operations:
            - name: "substack"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: substack-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"

        - name: "the-new-stack"
          path: "/"
          baseUri: "https://thenewstack.io/feed/"
          operations:
            - name: "the-new-stack"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: tns-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"

        - name: "crunchbase"
          path: "/"
          baseUri: "https://news.crunchbase.com/feed/"
          operations:
            - name: "crunchbase"
              method: "GET"
              outputRawFormat: "xml"
              outputParameters:
                - name: crunchbase-items
                  type: array
                  mapping: "$.rss.channel.item"
                  items:
                    - name: title
                      type: string
                      mapping: "$.title"
                    - name: link
                      type: string
                      mapping: "$.link"
                    - name: pubDate
                      type: string
                      mapping: "$.pubDate"

    # ===================================================================
    # CONSUMES - HTML Pages (Read-Only Scraping)
    # ===================================================================

    - namespace: "amazon-html"
      type: "http"
      baseUri: "https://www.amazon.com"
      resources:
        - name: "orders"
          path: "/gp/your-account/order-history"
          operations:
            - name: "get-orders"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: orders
                  type: array
                  mapping: "$.orders"

    - namespace: "expedia-html"
      type: "http"
      baseUri: "https://www.expedia.com"
      resources:
        - name: "trips"
          path: "/trips"
          operations:
            - name: "get-trips"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: trips
                  type: array
                  mapping: "$.trips"

    - namespace: "chase-html"
      type: "http"
      baseUri: "https://secure.chase.com"
      resources:
        - name: "accounts"
          path: "/web/auth/dashboard"
          operations:
            - name: "get-accounts"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: accounts
                  type: array
                  mapping: "$.accounts"

    - namespace: "etrade-html"
      type: "http"
      baseUri: "https://us.etrade.com"
      resources:
        - name: "portfolio"
          path: "/etx/pxy/my-accounts/portfolio"
          operations:
            - name: "get-portfolio"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: portfolio
                  type: object
                  mapping: "$.portfolio"

    - namespace: "creditkarma-html"
      type: "http"
      baseUri: "https://www.creditkarma.com"
      resources:
        - name: "dashboard"
          path: "/dashboard"
          operations:
            - name: "get-dashboard"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: scores
                  type: object
                  mapping: "$.scores"

    - namespace: "amtrak-html"
      type: "http"
      baseUri: "https://www.amtrak.com"
      resources:
        - name: "reservations"
          path: "/account/my-trips"
          operations:
            - name: "get-reservations"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: reservations
                  type: array
                  mapping: "$.reservations"

    - namespace: "alaskaair-html"
      type: "http"
      baseUri: "https://www.alaskaair.com"
      resources:
        - name: "trips"
          path: "/account/my-trips"
          operations:
            - name: "get-trips"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: trips
                  type: array
                  mapping: "$.trips"

    - namespace: "cvs-html"
      type: "http"
      baseUri: "https://www.cvs.com"
      resources:
        - name: "prescriptions"
          path: "/account/rx-refill"
          operations:
            - name: "get-prescriptions"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: prescriptions
                  type: array
                  mapping: "$.prescriptions"

    - namespace: "extraspace-html"
      type: "http"
      baseUri: "https://www.extraspace.com"
      resources:
        - name: "account"
          path: "/myaccount"
          operations:
            - name: "get-account"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: units
                  type: array
                  mapping: "$.units"

    - namespace: "trinet-html"
      type: "http"
      baseUri: "https://www.trinet.com"
      resources:
        - name: "dashboard"
          path: "/dashboard"
          operations:
            - name: "get-dashboard"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: info
                  type: object
                  mapping: "$.employee"

    - namespace: "zillow-html"
      type: "http"
      baseUri: "https://www.zillow.com"
      resources:
        - name: "saved-homes"
          path: "/myzillow/saved-homes"
          operations:
            - name: "get-saved-homes"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: homes
                  type: array
                  mapping: "$.homes"

    - namespace: "ancestry-html"
      type: "http"
      baseUri: "https://www.ancestry.com"
      resources:
        - name: "trees"
          path: "/family-tree"
          operations:
            - name: "get-trees"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: trees
                  type: array
                  mapping: "$.trees"

    # ===================================================================
    # CONSUMES - Institutional HTML Pages (Read-Only)
    # ===================================================================

    - namespace: "ietf-html"
      type: "http"
      baseUri: "https://www.ietf.org"
      resources:
        - name: "rfcs"
          path: "/rfc/"
          operations:
            - name: "get-recent-rfcs"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: rfcs
                  type: array
                  mapping: "$.rfcs"

    - namespace: "mit-html"
      type: "http"
      baseUri: "https://www.mit.edu"
      resources:
        - name: "news"
          path: "/news"
          operations:
            - name: "get-news"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: articles
                  type: array
                  mapping: "$.articles"

    - namespace: "moma-html"
      type: "http"
      baseUri: "https://www.moma.org"
      resources:
        - name: "exhibitions"
          path: "/calendar/exhibitions"
          operations:
            - name: "get-exhibitions"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: exhibitions
                  type: array
                  mapping: "$.exhibitions"

    - namespace: "nypl-html"
      type: "http"
      baseUri: "https://www.nypl.org"
      resources:
        - name: "events"
          path: "/events"
          operations:
            - name: "get-events"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: events
                  type: array
                  mapping: "$.events"

    - namespace: "ny-gov-html"
      type: "http"
      baseUri: "https://www.ny.gov"
      resources:
        - name: "news"
          path: "/news"
          operations:
            - name: "get-news"
              method: "GET"
              outputRawFormat: "html"
              outputParameters:
                - name: articles
                  type: array
                  mapping: "$.articles"