thais-skills
# thais-skills
An agent plugin with two skills:
1. **Redmine** — issue tracking, time logging, projects, attachments and
lookups against your Redmine instance, exposed as MCP tools.
2. **Markdown viewer** — one MCP tool (`serve_markdown_preview`) that opens a
`.md` file in the InkyMD reader in your browser: themes, fonts, code
highlighting, Mermaid/D2 diagrams, outline and reading progress. The reader
ships inside the plugin and runs fully offline from localhost.
## Install
### Claude Code
```
/plugin marketplace add leethais91/thais-skills
/plugin install thais-skills@leethais91
```
On first enable Claude asks for your Redmine URL and API key. The key is
stored in the OS keychain. Both prompts can be skipped if you set credentials
another way (see below).
### Codex
```bash
codex plugin marketplace add leethais91/thais-skills
codex plugin add thais-skills@leethais91
```
Start a new Codex session. Codex does not prompt for Redmine credentials; set
`REDMINE_URL` and `REDMINE_API_KEY` in the environment that launches Codex, or
use the config file described in the installation guide.
### OMP (Oh My Pi)
```bash
omp plugin marketplace add leethais91/thais-skills
omp plugin install thais-skills@leethais91
```
Start a new OMP session after installation. Set Redmine credentials in the
environment that launches OMP, or use the config file described below.
### Other Agent Plugins hosts
Add this repository as a plugin source using your host's installation flow.
The portable package includes `plugin.json`, `skills/`, and `mcp.json`.
See [`docs/installation.md`](docs/installation.md) for credentials and
verification.
## Requirements
- Node.js 18+
- A Redmine instance with the REST API enabled (Redmine skill only)
The Markdown viewer needs no credentials and no network access.
## Skills
| Skill | MCP server | Tools |
| --- | --- | --- |
| `redmine` | `redmine` | `redmine_*` — issues, notes, time entries, projects, users, attachments, lookups |
| `markdown-viewer` | `markdown-viewer` | `serve_markdown_preview` |
## Development
```bash
npm install
npm run build # typecheck, then bundle each MCP server into server/
npm run test:viewer # end-to-end smoke test for the Markdown viewer bundle
npm run test:redmine # Redmine MCP bundle against a local fake Redmine (never a real instance)
```
The plugin runs straight from git with no `npm install`, so the bundles in
`server/` are committed. Rebuild and commit them after changing `src/`.
The reader bundle in `src/markdown-viewer/reader/` is generated from the
InkyMD source repository and committed as-is. Its `manifest.json` pins the
source revision and hashes every file; the server refuses to serve a missing
or modified bundle.
## License
MIT
TDQS
Scored across 24 tools
Every tool maps to a clear verb-noun pair: issues, projects, time entries, attachments, preferences, and metadata each have distinct tools. Even update_issue and add_note are cleanly separated by intent (full update vs. comment-only), so an agent should rarely misselect.
All 24 tools use the redmine_ prefix with snake_case and a consistent verb_noun pattern like list_, get_, create_, update_, delete_, add_, upload_, download_, save_. No mixed conventions or vague verbs appear.
24 tools is in the heavy range for a single server. While each tool has a legitimate Redmine purpose, the many list_* metadata tools (statuses, trackers, priorities, activities, custom fields) could plausibly be consolidated, making the surface feel larger than necessary.
The set covers issue read/create/update and time entry CRUD, plus attachments and preferences, but notably lacks an issue deletion tool. Project coverage is also read-only (list/get only), so core lifecycle operations are incomplete despite broad feature coverage.