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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: Validate

on:
push:
pull_request:

permissions:
contents: read

jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm run validate
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules/
112 changes: 42 additions & 70 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,87 +1,59 @@
# Agent Plugins Example
# Mobbin Agent Plugin

A copyable reference package for the [Agent Plugins Specification v1.0.0](https://agent-plugins.org/specification).
The Mobbin Agent Plugin packages Mobbin's hosted MCP server for Agent Plugins 1.0.0 clients. It
helps agents find real-world UI screens, multi-step flows, and website sections from Mobbin's
design library.

This repository demonstrates the portable core and includes an Agent Skill that helps migrate existing plugins from client-specific formats. It is a reference example, not a substitute for the normative specification; if they differ, the specification wins.
## Install

## Layout
The package is a portable Agent Plugins 1.0.0 directory. Use the installation flow documented by
your client:

```text
agent-plugins-example/
├── plugin.json # Required portable manifest
├── skills/ # Portable Agent Skills
│ └── migrate-agent-plugin/
│ ├── SKILL.md
│ └── references/
│ ├── client-extensions.md
│ ├── migration-guide.md
│ └── validation-checklist.md
├── README.md
└── LICENSE
```
- [VS Code](https://code.visualstudio.com/docs/agent-customization/agent-plugins): install from
the marketplace, use **Chat: Install Plugin From Source**, or register a local checkout with
`chat.pluginLocations`.
- [Cursor](https://cursor.com/docs/plugins): install from Customize, or load a local checkout
from `~/.cursor/plugins/local/`.
- [GitHub Copilot](https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-plugin-reference):
use `copilot plugin install OWNER/REPO` or the documented local/repository flow.
- [Kiro](https://kiro.dev/docs/powers/installation/): use **Powers → Add Custom Power**.
- [ChatGPT and Codex](https://developers.openai.com/plugins): install through OpenAI's plugin
directory.

Claude Code is not an Agent Plugins-compatible client; use Mobbin's
[`claude mcp add` setup](https://docs.mobbin.com/mcp/clients/claude-code) instead.

The smallest valid plugin needs only `plugin.json`. This example includes a skill so it is useful as well as structurally illustrative.
On first use, the client opens a browser for OAuth authorization. You need a Mobbin account on a
Pro, Team, or Enterprise plan. The plugin contains no API key or other credential.

## The portable core
## What it installs

Agent Plugins v1 defines two portable component types:
- The `mobbin` MCP server at `https://api.mobbin.com/mcp` using Streamable HTTP.

- Agent Skills under immediate child directories of `skills/`.
- MCP servers in an optional root `mcp.json` using the matching v1.0.0 MCP schema.
The root `plugin.json` and `mcp.json` are the only package configuration files required by the
Agent Plugins standard.

The root `plugin.json` schema is closed. Do not add `hooks`, `agents`, `commands`, `mcpServers`, `lspServers`, or arbitrary client fields at its top level. Put portable MCP configuration in `mcp.json` and client-owned manifest data inside `extensions`.
Mobbin provides these read-only MCP tools:

See the authoritative documentation for the [plugin manifest](https://agent-plugins.org/plugin-authors/manifest), [skills](https://agent-plugins.org/plugin-authors/skills), [MCP servers](https://agent-plugins.org/plugin-authors/mcp-servers), and [client extensions](https://agent-plugins.org/plugin-authors/client-extensions).
- `search_screens` — UI screens.
- `search_flows` — multi-step user journeys such as onboarding and checkout.
- `search_sections` — website sections such as pricing pages, heroes, and footers.

## Add client-specific capabilities safely
Results include images, metadata, and links back to Mobbin.

Hooks and similar capabilities are not portable v1 components. A client can add them through a reverse-domain extension namespace it owns and documents:
## Layout

```text
your-plugin/
mobbin-agent-plugin/
├── plugin.json
├── skills/
├── mcp.json # Optional portable MCP configuration
└── com.vendor.client/ # Optional client extension
└── hooks/
└── hooks.json
```

If a client uses both manifest data and files, `plugin.json` can contain an extension object:

```json
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "your-plugin",
"extensions": {
"com.vendor.client": {
"settingDefinedByThatClient": true
}
}
}
├── mcp.json
├── schemas/1.0.0/
│ ├── plugin.schema.json
│ └── mcp.schema.json
├── scripts/
│ └── validate.mjs
└── .github/workflows/validate.yml
```

`com.vendor.client` is illustrative. Use only a namespace and fields documented by the client that owns them. Other clients ignore an extension they do not implement, leaving the portable skills and MCP configuration usable.

## Migrate without breaking the existing plugin

Use an additive migration:

1. Add and validate the root `plugin.json` without deleting working platform files.
2. Move or copy reusable skills into `skills/<skill-name>/SKILL.md`.
3. Convert portable MCP servers to root `mcp.json` with explicit transport types.
4. Keep hooks, agents, commands, LSP, UI, and marketplace metadata in a client extension or a separate compatibility package required by that platform.
5. Test the portable core and every supported client package before removing legacy files.

The included [`migrate-agent-plugin` skill](skills/migrate-agent-plugin/SKILL.md) contains the full migration workflow, artifact mapping, extension strategy, and validation checklist.

## Copy this example

1. Copy this directory and rename it to match your plugin.
2. Update `name`, `version`, `description`, `author`, and other allowed metadata in `plugin.json`.
3. Replace the example skill or add more immediate children under `skills/`.
4. Add `mcp.json` only if the plugin provides MCP servers.
5. Add client extensions only for namespaces implemented by your target clients.
6. Validate paths, schemas, skills, and each supported client integration.

The directory name and manifest name do not have to match under the portable specification, but keeping them identical is strongly recommended for predictable packaging and discovery.
Read the [Mobbin MCP introduction](https://docs.mobbin.com/mcp/introduction) for client setup and
authorization details.
9 changes: 9 additions & 0 deletions mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
"mcpServers": {
"mobbin": {
"type": "streamable-http",
"url": "https://api.mobbin.com/mcp"
}
}
}
71 changes: 71 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"name": "mobbin-agent-plugin",
"private": true,
"type": "module",
"scripts": {
"validate": "node scripts/validate.mjs"
},
"devDependencies": {
"ajv": "8.20.0"
}
}
14 changes: 10 additions & 4 deletions plugin.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "agent-plugins-example",
"version": "1.0.0",
"description": "A copyable reference package and migration guide for Agent Plugins v1.0.0.",
"name": "mobbin",
"version": "0.1.0",
"description": "Search Mobbin's UI library for screens, flows, and website sections from your agent.",
"author": {
"name": "Mobbin",
"url": "https://mobbin.com"
},
"homepage": "https://docs.mobbin.com/mcp/introduction",
"repository": "https://github.com/mobbin/mobbin-agent-plugin",
"license": "MIT",
"keywords": ["agent-plugins", "example", "migration", "skills"]
"keywords": ["mobbin", "design-research", "ui-design", "ux-design", "mcp"]
}
120 changes: 120 additions & 0 deletions schemas/1.0.0/mcp.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
"title": "Agent Plugins MCP Configuration",
"description": "Machine-readable schema for mcp.json in Agent Plugins 1.0.0. The Agent Plugins specification defines additional semantic and operational requirements.",
"type": "object",
"properties": {
"$schema": {
"const": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
"description": "Canonical identifier of the MCP configuration schema for the Agent Plugins version targeted by this document."
},
"mcpServers": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/server"
}
}
},
"required": ["$schema", "mcpServers"],
"additionalProperties": false,
"$defs": {
"server": {
"title": "MCP server",
"oneOf": [
{
"$ref": "#/$defs/stdioServer"
},
{
"$ref": "#/$defs/streamableHttpServer"
},
{
"$ref": "#/$defs/sseServer"
}
]
},
"stdioServer": {
"title": "stdio MCP server",
"type": "object",
"properties": {
"type": {
"const": "stdio"
},
"command": {
"type": "string",
"minLength": 1,
"description": "Executable token. Resolution rules are defined by the Agent Plugins specification."
},
"args": {
"type": "array",
"items": {
"type": "string"
}
},
"env": {
"type": "object",
"propertyNames": {
"not": {
"enum": ["PLUGIN_ROOT", "PLUGIN_DATA"]
}
},
"additionalProperties": {
"type": "string"
}
},
"cwd": {
"type": "string",
"pattern": "^(?:\\./|\\$\\{PLUGIN_ROOT\\}(?:/|$)|\\$\\{PLUGIN_DATA\\}(?:/|$))",
"description": "Plugin-relative, PLUGIN_ROOT-rooted, or PLUGIN_DATA-rooted working directory. Filesystem containment is validated separately."
}
},
"required": ["type", "command"],
"additionalProperties": false
},
"streamableHttpServer": {
"title": "Streamable HTTP MCP server",
"type": "object",
"properties": {
"type": {
"const": "streamable-http"
},
"url": {
"type": "string",
"minLength": 1,
"description": "MCP endpoint URL. URL semantics are defined by the Agent Plugins specification."
},
"headers": {
"$ref": "#/$defs/headers"
}
},
"required": ["type", "url"],
"additionalProperties": false
},
"sseServer": {
"title": "Legacy HTTP+SSE MCP server",
"type": "object",
"properties": {
"type": {
"const": "sse"
},
"url": {
"type": "string",
"minLength": 1,
"description": "MCP endpoint URL. URL semantics are defined by the Agent Plugins specification."
},
"headers": {
"$ref": "#/$defs/headers"
}
},
"required": ["type", "url"],
"additionalProperties": false
},
"headers": {
"title": "HTTP headers",
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
Loading
Loading