{
  "protocolVersion": "0.3.0",
  "name": "Harny",
  "description": "Per-user memory, connected accounts, permitted actions and the action record for your agents. An agent sets it up with no account.",
  "url": "https://mcp.harny.ai",
  "version": "0.1.4",
  "provider": {
    "organization": "Harny",
    "url": "https://harny.ai"
  },
  "documentationUrl": "https://harny.ai/docs/mcp/overview",
  "iconUrl": "https://harny.ai/apple-touch-icon.png",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false,
    "extensions": [
      {
        "uri": "https://modelcontextprotocol.io/",
        "description": "The url is a Model Context Protocol server (Streamable HTTP). Connect with an MCP client; tools: https://harny.ai/.well-known/mcp.json",
        "required": false
      }
    ]
  },
  "securitySchemes": {
    "harnyKey": {
      "type": "http",
      "scheme": "bearer",
      "description": "The app key (fsa_) or a person's key (fsk_). With no Authorization header the server lists only provision_app."
    }
  },
  "security": [
    {
      "harnyKey": []
    },
    {}
  ],
  "defaultInputModes": [
    "text/plain",
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json",
    "text/plain"
  ],
  "skills": [
    {
      "id": "remember",
      "name": "Remember",
      "description": "Save a note or a durable fact about one person so later recalls can find it. MCP tool ingest_text; REST POST /v1/vault/ingest/text. Not for streaming conversation transcripts.",
      "tags": [
        "memory",
        "write",
        "ingest_text"
      ],
      "examples": [
        "Remember that Casey prefers async standups and blocks Fridays for deep work.",
        "Note that the Acme pilot budget moved from 32k to 40k."
      ]
    },
    {
      "id": "recall",
      "name": "Recall",
      "description": "Return ranked, dated context for one person, with the data point behind each result. MCP tool assemble_context; REST POST /v1/context/assemble.",
      "tags": [
        "memory",
        "read",
        "assemble_context"
      ],
      "examples": [
        "What is the Acme pilot budget now?",
        "When should I schedule a meeting with Casey?"
      ]
    },
    {
      "id": "store-preference",
      "name": "Store preference",
      "description": "Save a person's stated preference as a fact in their private memory, so the app's AI answers the way they asked next time. MCP tool ingest_text; recalled with assemble_context.",
      "tags": [
        "memory",
        "preferences",
        "ingest_text"
      ],
      "examples": [
        "Store that Dana wants short answers with the number first.",
        "Save that Lee reads email in the morning only."
      ]
    },
    {
      "id": "set-up",
      "name": "Set up with no account",
      "description": "Make an app and its key with no account. MCP tool provision_app (needs no key); the answer carries the app key once. Full steps: https://harny.ai/auth.md.",
      "tags": [
        "setup",
        "provision_app"
      ],
      "examples": [
        "Add Harny memory to this app."
      ]
    },
    {
      "id": "connect-account",
      "name": "Connect an account",
      "description": "Let a person connect their Gmail, Calendar, Drive, Notion or Slack so the agent reads only their data. MCP tool configure_oauth.",
      "tags": [
        "accounts",
        "oauth",
        "configure_oauth"
      ],
      "examples": [
        "Let Casey connect her Gmail so the assistant can read her mail.",
        "Connect Dana's Google Calendar to this app."
      ]
    },
    {
      "id": "create-event",
      "name": "Create a calendar event",
      "description": "Create one event on the person's own calendar, inside the permissions the app owner set. MCP tool calendar_create_event. Recorded in action_history.",
      "tags": [
        "actions",
        "calendar",
        "calendar_create_event"
      ],
      "examples": [
        "Book a 30-minute call with Casey next Tuesday on my calendar.",
        "Put the Acme review on Friday at 2pm."
      ]
    },
    {
      "id": "send-email",
      "name": "Send an email",
      "description": "Send one plain-text email from the person's own connected Gmail, inside the permissions the app owner set. MCP tool email_send. Recorded in action_history.",
      "tags": [
        "actions",
        "email",
        "email_send"
      ],
      "examples": [
        "Send Nadia the updated budget by email.",
        "Reply to Lee's thread to say Thursday works."
      ]
    },
    {
      "id": "open-ticket",
      "name": "Open a ticket",
      "description": "File one ticket for the person in the business's helpdesk, inside the permissions the app owner set. MCP tool ticket_create. Recorded in action_history.",
      "tags": [
        "actions",
        "tickets",
        "ticket_create"
      ],
      "examples": [
        "Open a ticket that Dana's invoice shows the wrong amount.",
        "File a bug: the export button does nothing."
      ]
    },
    {
      "id": "post-message",
      "name": "Post a Slack message",
      "description": "Post one message to a channel of the business's Slack for the person, inside the permissions the app owner set. MCP tool slack_post_message. Recorded in action_history.",
      "tags": [
        "actions",
        "slack",
        "slack_post_message"
      ],
      "examples": [
        "Post in #launch that the release is out.",
        "Tell #support that Casey's refund went through."
      ]
    },
    {
      "id": "create-page",
      "name": "Create a Notion page",
      "description": "Create one page in the business's Notion for the person, inside the permissions the app owner set. MCP tool notion_create_page. Recorded in action_history.",
      "tags": [
        "actions",
        "notion",
        "notion_create_page"
      ],
      "examples": [
        "Create a Notion page with notes from today's call with Acme.",
        "Add a page for the Q1 plan."
      ]
    },
    {
      "id": "undo",
      "name": "Undo an action",
      "description": "Reverse an earlier action the agent took for the person, where the action can be reversed. MCP tool undo_action; it takes the record of the action to undo.",
      "tags": [
        "actions",
        "undo",
        "undo_action"
      ],
      "examples": [
        "Undo the calendar event you just created.",
        "Cancel that meeting with Casey."
      ]
    },
    {
      "id": "action-record",
      "name": "Action record",
      "description": "Read what the app did for this person and when: every action, with its outcome. MCP tool action_history.",
      "tags": [
        "record",
        "read",
        "action_history"
      ],
      "examples": [
        "What did the assistant do for Casey this week?",
        "Did the email to Nadia go out?"
      ]
    },
    {
      "id": "run-agent",
      "name": "Run an agent",
      "description": "Run your own agent loop on your own model key, with Harny's memory, connected accounts, actions and action record. Python: harny.agent Agent; TypeScript: Agent from @harny/sdk. Docs: https://harny.ai/docs/agent-harness/quickstart",
      "tags": [
        "harness",
        "agent",
        "python",
        "typescript"
      ],
      "examples": [
        "Run an agent in my app that remembers each user.",
        "Start an agent loop on my own model key."
      ]
    },
    {
      "id": "long-job",
      "name": "Run a long job",
      "description": "Let the agent work through a bigger task over several turns in a folder you choose, on your own model key. Python only: long_task in harny.agent AgentConfig. Docs: https://harny.ai/docs/agent-harness/long-jobs",
      "tags": [
        "harness",
        "long-job",
        "python"
      ],
      "examples": [
        "Run a long job that works through this folder of reports.",
        "Have the agent finish the migration over several turns."
      ]
    }
  ]
}
