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 .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "terminal49",
"interface": {
"displayName": "Terminal49"
},
"plugins": [
{
"name": "terminal49",
"source": {
"source": "local",
"path": "./plugins/terminal49"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
]
}
18 changes: 18 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "terminal49",
"owner": {
"name": "Terminal49"
},
"metadata": {
"description": "Terminal49 container-tracking tools and agent skills",
"version": "0.1.0"
},
"plugins": [
{
"name": "terminal49",
"source": "./plugins/terminal49",
"description": "Use Terminal49 MCP tools to track and investigate container shipments",
"version": "0.1.0"
}
]
}
18 changes: 18 additions & 0 deletions .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "terminal49",
"owner": {
"name": "Terminal49"
},
"metadata": {
"description": "Terminal49 container-tracking tools and agent skills",
"version": "0.1.0"
},
"plugins": [
{
"name": "terminal49",
"source": "./plugins/terminal49",
"description": "Use Terminal49 MCP tools to track and investigate container shipments",
"version": "0.1.0"
}
]
}
22 changes: 22 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Validate plugins

on:
pull_request:
push:
branches:
- main

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 --ignore-scripts
- run: npm run validate
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.DS_Store
node_modules/
npm-debug.log*
40 changes: 40 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Agent instructions

This is a public, cross-platform plugin marketplace for Terminal49.

## Safety

- Never commit API keys, OAuth tokens, internal URLs, customer identifiers, or
customer shipment data.
- Use placeholders or clearly illustrative identifiers in examples.
- Keep the production connector URL exactly
`https://mcp.terminal49.com`. Do not add `/mcp` to it; the origin is the OAuth
resource identifier.
- Do not ask users to paste credentials into chat. Let the client initiate its
OAuth connection flow.

## Shared source of truth

- `plugins/terminal49/skills/terminal49-mcp/SKILL.md` is the shared behavioral
guidance for all clients.
- `plugins/terminal49/.mcp.json` and `plugins/terminal49/mcp.json` are the MCP
adapters for Claude/Codex and Cursor respectively. Keep their server entries
identical.
- `.cursor-plugin`, `.claude-plugin`, and `.codex-plugin` manifests are thin
platform adapters. Keep their shared fields in sync: `name`, `displayName`,
`version`, `description`, `author`, `homepage`, `repository`, `license`,
`keywords`, and the skills/MCP paths (`npm run validate` enforces this).
Platform-only fields may diverge: Cursor's `logo` and `category`, and Codex's
`interface` block (its `displayName` must still match the manifest).
- Marketplace files must continue to point to `./plugins/terminal49`.

## Validation

Run `npm run validate` after every change. CI runs the same script on every
push and pull request (`.github/workflows/validate.yml`). When a supported
client is installed, also use its native validator before publishing.

## Releases

Bump the version in all three plugin manifests and both versioned marketplace
files for every release. Keep releases small and document user-visible changes.
23 changes: 23 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Contributing

Thanks for improving the Terminal49 agent plugins.

## Principles

1. Keep the shared skill client-neutral.
2. Prefer tool-selection guidance over duplicating the Terminal49 API docs.
3. Treat `track_container` as a write: search first and create a tracking
request only when the user intends to start tracking.
4. Preserve the distinction between missing data, unsupported features, and
operational states.
5. Never include secrets or real customer shipment data.

## Make a change

1. Update the shared skill or the smallest applicable platform adapter.
2. Keep manifest metadata and versions synchronized.
3. Run `npm run validate`.
4. Test installation in any client affected by the change.

Platform-specific behavior belongs in its adapter. Guidance that applies to all
clients belongs in `plugins/terminal49/skills/terminal49-mcp/SKILL.md`.
112 changes: 110 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,110 @@
# agent-plugins-
Terminal49 container tracking an execution Agent Skills and tools for Claude, ChatGPT, CoPilot and other LLMs
# Terminal49 agent plugins

Install Terminal49 container-tracking tools and workflow guidance in Cursor,
Claude Code, Codex, and GitHub Copilot CLI.

This marketplace currently publishes one plugin:

- **Terminal49** — connects to the hosted Terminal49 MCP server and teaches
agents how to search, track, and investigate container shipments.

## What the plugin provides

- OAuth connection to `https://mcp.terminal49.com`
- A shared `terminal49-mcp` skill for choosing and sequencing MCP tools
- Guidance for status, pickup readiness, holds, ETAs, routes, delays, and
demurrage-risk questions
- Guardrails around tracking-request creation, credentials, dates, and missing
data

The plugin does not contain API keys or customer data. Authentication happens
through the MCP client's OAuth flow.

## Install

### Cursor

In Cursor chat, run:

```text
/add-plugin https://github.com/dodeja/agent-plugins
```

Then select and install **Terminal49**. Cursor will prompt you to connect the
MCP server when the plugin first needs it.

### Claude Code

```sh
claude plugin marketplace add dodeja/agent-plugins
claude plugin install terminal49@terminal49
```

### Codex

```sh
codex plugin marketplace add dodeja/agent-plugins
codex plugin add terminal49@terminal49
```

### GitHub Copilot CLI

Copilot CLI can read the Claude-compatible marketplace included in this
repository:

```sh
copilot plugin marketplace add dodeja/agent-plugins
copilot plugin install terminal49@terminal49
```

## Try it

After connecting your Terminal49 account, ask your agent:

- “Where is container ABCU1234567?”
- “Is this container ready for pickup, and are there any holds?”
- “Explain what changed in this container's journey.”
- “Show containers updated since yesterday and group them by status.”

The example identifier is illustrative. Results depend on the shipments visible
to the authenticated Terminal49 account.

## Repository layout

```text
.
├── .agents/plugins/marketplace.json # Codex marketplace
├── .claude-plugin/marketplace.json # Claude Code and Copilot marketplace
├── .cursor-plugin/marketplace.json # Cursor marketplace
└── plugins/terminal49/
├── .claude-plugin/plugin.json
├── .codex-plugin/plugin.json
├── .cursor-plugin/plugin.json
├── .mcp.json # Claude and Codex MCP adapter
├── mcp.json # Cursor MCP adapter
├── README.md
├── assets/logo.svg # Referenced by the Cursor manifest
└── skills/terminal49-mcp/SKILL.md
```

The skill is shared. Each platform-specific manifest and MCP file is a thin
adapter around that shared content, with validation keeping the endpoint in
sync.

## Development

Requires Node.js 22 or newer.

```sh
npm run validate
```

CI runs the same validation on every push and pull request via
[`.github/workflows/validate.yml`](.github/workflows/validate.yml).

See [CONTRIBUTING.md](CONTRIBUTING.md) before changing the shared skill or
platform manifests.

## License

Apache-2.0. See [LICENSE](LICENSE).
16 changes: 16 additions & 0 deletions package-lock.json

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

13 changes: 13 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "terminal49-agent-plugins",
"version": "0.1.0",
"private": true,
"description": "Cross-platform Terminal49 agent plugin marketplace",
"license": "Apache-2.0",
"engines": {
"node": ">=22"
},
"scripts": {
"validate": "node scripts/validate.mjs"
}
}
22 changes: 22 additions & 0 deletions plugins/terminal49/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "terminal49",
"displayName": "Terminal49",
"version": "0.1.0",
"description": "Track and investigate container shipments with Terminal49 MCP tools and workflow guidance.",
"author": {
"name": "Terminal49"
},
"homepage": "https://terminal49.com",
"repository": "https://github.com/dodeja/agent-plugins",
"license": "Apache-2.0",
"keywords": [
"container-tracking",
"logistics",
"mcp",
"ocean-freight",
"supply-chain"
],
"skills": "./skills/",
"mcpServers": "./.mcp.json"
}
36 changes: 36 additions & 0 deletions plugins/terminal49/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"name": "terminal49",
"displayName": "Terminal49",
"version": "0.1.0",
"description": "Track and investigate container shipments with Terminal49 MCP tools and workflow guidance.",
"author": {
"name": "Terminal49"
},
"homepage": "https://terminal49.com",
"repository": "https://github.com/dodeja/agent-plugins",
"license": "Apache-2.0",
"keywords": [
"container-tracking",
"logistics",
"mcp",
"ocean-freight",
"supply-chain"
],
"skills": "./skills/",
"mcpServers": "./.mcp.json",
"interface": {
"displayName": "Terminal49",
"shortDescription": "Track and investigate container shipments",
"longDescription": "Connect to Terminal49 and use guided workflows for container status, pickup readiness, holds, ETAs, routes, delays, and demurrage risk.",
"developerName": "Terminal49",
"category": "Productivity",
"capabilities": [
"Interactive",
"Write"
],
"websiteURL": "https://terminal49.com",
"defaultPrompt": [
"Track a container or investigate the latest status of my shipments"
]
}
}
23 changes: 23 additions & 0 deletions plugins/terminal49/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "terminal49",
"displayName": "Terminal49",
"version": "0.1.0",
"description": "Track and investigate container shipments with Terminal49 MCP tools and workflow guidance.",
"author": {
"name": "Terminal49"
},
"homepage": "https://terminal49.com",
"repository": "https://github.com/dodeja/agent-plugins",
"license": "Apache-2.0",
"logo": "assets/logo.svg",
"keywords": [
"container-tracking",
"logistics",
"mcp",
"ocean-freight",
"supply-chain"
],
"category": "Productivity",
"skills": "./skills/",
"mcpServers": "./mcp.json"
}
8 changes: 8 additions & 0 deletions plugins/terminal49/.mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mcpServers": {
"terminal49": {
"type": "http",
"url": "https://mcp.terminal49.com"
}
}
}
Loading
Loading