REPO_REFACT.md and ECOSYSTEM_PLAN.md moved out of the un-versioned workspace root into the devarea repo, next to WIKI_CONNECTION.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
99 lines
5.5 KiB
Markdown
99 lines
5.5 KiB
Markdown
# TTG Marketplace
|
|
|
|
Claude Code plugin marketplace with three plugins:
|
|
|
|
- **redmine-mcp** — dependency-free Node.js MCP server for the [Redmine REST API](https://www.redmine.org/projects/redmine/wiki/rest_api)
|
|
- **grav-mcp** — dependency-free Node.js MCP server for the [Grav CMS REST API](https://learn.getgrav.org/20/api/endpoints)
|
|
- **ttg-ops** — skills for running the forge estate: releasing libraries, moving and creating repos, enrolling CI, auditing consistency, and updating the docs after a change
|
|
|
|
## Installation
|
|
|
|
```
|
|
/plugin marketplace add /Users/tasi/Work/TTG/ttg-marketplace
|
|
/plugin install redmine-mcp@ttg-marketplace
|
|
/plugin install grav-mcp@ttg-marketplace
|
|
/plugin install ttg-ops@ttg-marketplace
|
|
```
|
|
|
|
(From a git repo: `/plugin marketplace add <git-url>`.)
|
|
|
|
After installing: `/reload-plugins` or start a new session.
|
|
|
|
## redmine-mcp
|
|
|
|
Settings requested at install time:
|
|
|
|
| Setting | Description |
|
|
|---|---|
|
|
| `redmine_url` | Base URL of the Redmine instance, e.g. `https://redmine.example.com` |
|
|
| `redmine_api_key` | My account → "API access key" on the right (the administrator must enable it: Administration → Settings → API → Enable REST web service) |
|
|
|
|
**Issues:** `redmine_list_issues`, `redmine_get_issue` (with journals/attachments/relations includes), `redmine_create_issue`, `redmine_update_issue` (fields + comment via `notes`), `redmine_delete_issue`
|
|
|
|
**Projects:** `redmine_list_projects`, `redmine_get_project`, `redmine_list_versions`
|
|
|
|
**Time tracking:** `redmine_list_time_entries`, `redmine_create_time_entry`, `redmine_update_time_entry`, `redmine_delete_time_entry`
|
|
|
|
**Users:** `redmine_list_users` (admin), `redmine_get_user` (`id="current"` = own account)
|
|
|
|
**Reference data:** `redmine_list_metadata` — statuses, trackers, priorities, activities, custom fields, roles, saved queries, groups, project categories, memberships
|
|
|
|
**Wiki and search:** `redmine_list_wiki_pages`, `redmine_get_wiki_page`, `redmine_update_wiki_page` (upsert), `redmine_search`
|
|
|
|
## grav-mcp
|
|
|
|
Settings requested at install time:
|
|
|
|
| Setting | Description |
|
|
|---|---|
|
|
| `grav_url` | Base URL of the Grav site, e.g. `https://example.com` (`/api/v1` is appended automatically) |
|
|
| `grav_api_key` | API key — created for your user account in the Grav admin, sent as the `X-API-Key` header |
|
|
|
|
**Pages:** `grav_list_pages` (search, template/parent/published filters), `grav_get_page` (markdown or rendered HTML, children, translation metadata), `grav_create_page`, `grav_update_page`, `grav_delete_page`, `grav_move_page`, `grav_copy_page`, `grav_reorder_pages`, `grav_translate_page`, `grav_list_taxonomy`
|
|
|
|
**Media:** `grav_list_media` (site- or page-level), `grav_upload_media` (uploads a local file via multipart), `grav_delete_media`, `grav_manage_media` (rename file, create/delete/rename folders)
|
|
|
|
**Configuration:** `grav_get_config`, `grav_update_config` (deep-merge; system, site, plugins/{name}, themes/{name} scopes)
|
|
|
|
**Users:** `grav_list_users`, `grav_get_user` (`username="me"` = own account), `grav_create_user`, `grav_update_user`, `grav_delete_user`
|
|
|
|
**System:** `grav_system_info`, `grav_clear_cache`, `grav_get_logs`, `grav_manage_backups`
|
|
|
|
**Blueprints:** `grav_get_blueprint` — page templates, user, permissions, config, plugin, theme and flex schemas
|
|
|
|
**Package manager (GPM):** `grav_list_packages` (installed or repository), `grav_check_updates`, `grav_manage_package` (install/remove/update/update-all/core upgrade)
|
|
|
|
**Other:** `grav_scheduler` (jobs, status, history, run), `grav_dashboard` (stats, popularity, notifications), `grav_manage_webhooks`, flex objects: `grav_list_flex`, `grav_get_flex_object`, `grav_save_flex_object`, `grav_delete_flex_object`
|
|
|
|
## ttg-ops
|
|
|
|
No settings — the skills drive the tools that are already on the machine: the
|
|
`tea` CLI (Gitea API, login `ttg`), `git`, `go` and `gem`.
|
|
|
|
| Skill | What it does |
|
|
|---|---|
|
|
| `ttg-publish-module` | Releases a library: checks the module path against the repo's org, tags, and verifies from a clean external project that the release is fetchable. Knows that Gitea's redirect does **not** cover Go module paths or package namespaces. |
|
|
| `ttg-move-repo` | Moves or renames a repo and follows the change through: clone list, local remotes, wiki links and link text, `go.mod`, `Gemfile`, CI config, docs. |
|
|
| `ttg-new-repo` | Creates a repo in the right org and registers it everywhere — clone list, `WIKI_CONNECTION.md`, wiki page, CI. Includes the org/team setup a new org needs. |
|
|
| `ttg-ci-enroll` | Wires a repo into the Woodpecker build and proves it runs. Covers the usual failure: the config is there, the repo is not registered, nothing happens silently. |
|
|
| `ttg-audit-forge` | Audits drift between forge, clone list, wiki, catalog and CI. Reports first, fixes only on approval. |
|
|
| `ttg-update-docs` | After a change, updates the README of the repo that changed, its wiki page in `wiki-pages`, and the public site in `teletypegames` (Vue page plus **both** locale files). |
|
|
|
|
The rules these skills follow are not duplicated inside them: the org taxonomy
|
|
lives in `devarea/REPO_REFACT.md`, the repo→wiki mapping in
|
|
`devarea/WIKI_CONNECTION.md`, and the ecosystem status in
|
|
`devarea/ECOSYSTEM_PLAN.md`. The
|
|
skills read those rather than carry a second copy that drifts.
|
|
|
|
## Notes
|
|
|
|
- Neither MCP server has any npm dependencies (Node 18+ built-in `fetch`), and there is no build step.
|
|
- Manual testing without the plugin:
|
|
```sh
|
|
REDMINE_URL=https://redmine.example.com REDMINE_API_KEY=xxx \
|
|
node plugins/redmine-mcp/server/index.js
|
|
|
|
GRAV_URL=https://example.com GRAV_API_KEY=xxx \
|
|
node plugins/grav-mcp/server/index.js
|
|
```
|