diff --git a/.gitea/.moko-platform b/.gitea/.moko-platform
new file mode 100644
index 0000000..6a1ab3d
--- /dev/null
+++ b/.gitea/.moko-platform
@@ -0,0 +1,25 @@
+
+
+
+
+ joomla-api-mcp
+ MokoConsulting
+ MCP server for Joomla Web Services API operations
+ GNU General Public License v3
+
+
+ nodejs
+ 04.07.00
+ https://git.mokoconsulting.tech/MokoConsulting/moko-platform
+ 2026-05-10T19:51:10+00:00
+
+
+ TypeScript
+ mcp-server
+ src/
+
+
diff --git a/.gitea/.mokostandards b/.gitea/.mokostandards
deleted file mode 100644
index bf04b01..0000000
--- a/.gitea/.mokostandards
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
- joomla-api-mcp
- MokoConsulting
- MCP server for Joomla Web Services API operations
- GNU General Public License v3
-
-
- mcp-server
- 04.07.00
- https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
- 2026-05-07T19:13:00+00:00
-
-
- TypeScript
- mcp-server
-
-
-
- ${{ secrets.DEV_HOST }}
- ${{ secrets.DEV_PATH }}
- sftp
- dev/**
- src/
-
-
- ${{ secrets.DEMO_HOST }}
- ${{ secrets.DEMO_PATH }}
- sftp
- main
- src/
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.gitea/workflows/mcp-build-test.yml b/.gitea/workflows/mcp-build-test.yml
index cb631c7..5d8b97b 100644
--- a/.gitea/workflows/mcp-build-test.yml
+++ b/.gitea/workflows/mcp-build-test.yml
@@ -15,6 +15,10 @@ on:
branches: [main]
paths: ['src/**', 'package.json', 'tsconfig.json']
+
+permissions:
+ contents: read
+
jobs:
build:
runs-on: ubuntu-latest
diff --git a/.gitea/workflows/mcp-sdk-check.yml b/.gitea/workflows/mcp-sdk-check.yml
index b926cd3..752eccc 100644
--- a/.gitea/workflows/mcp-sdk-check.yml
+++ b/.gitea/workflows/mcp-sdk-check.yml
@@ -12,6 +12,10 @@ on:
- cron: '0 9 * * 1' # Every Monday at 9am UTC
workflow_dispatch:
+
+permissions:
+ contents: read
+
jobs:
check-sdk:
runs-on: ubuntu-latest
diff --git a/.gitea/workflows/mcp-tool-inventory.yml b/.gitea/workflows/mcp-tool-inventory.yml
index f935b0c..cc4c614 100644
--- a/.gitea/workflows/mcp-tool-inventory.yml
+++ b/.gitea/workflows/mcp-tool-inventory.yml
@@ -13,6 +13,10 @@ on:
paths: ['src/index.ts']
workflow_dispatch:
+
+permissions:
+ contents: read
+
jobs:
inventory:
runs-on: ubuntu-latest
diff --git a/.gitea/workflows/pr-branch-check.yml b/.gitea/workflows/pr-branch-check.yml
new file mode 100644
index 0000000..b8d9742
--- /dev/null
+++ b/.gitea/workflows/pr-branch-check.yml
@@ -0,0 +1,90 @@
+# Copyright (C) 2026 Moko Consulting
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# Enforces branch merge policy:
+# feature/* → dev only
+# fix/* → dev only
+# hotfix/* → dev or main (emergency)
+# dev → main only
+# alpha/* → dev only
+# beta/* → dev only
+# rc/* → main only
+
+name: Branch Policy Check
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened, edited]
+
+jobs:
+ check-target:
+ name: Verify merge target
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check branch policy
+ run: |
+ HEAD="${{ github.head_ref }}"
+ BASE="${{ github.base_ref }}"
+
+ echo "PR: ${HEAD} → ${BASE}"
+
+ ALLOWED=true
+ REASON=""
+
+ case "$HEAD" in
+ feature/*|feat/*)
+ if [ "$BASE" != "dev" ]; then
+ ALLOWED=false
+ REASON="Feature branches must target 'dev', not '${BASE}'"
+ fi
+ ;;
+ fix/*|bugfix/*)
+ if [ "$BASE" != "dev" ]; then
+ ALLOWED=false
+ REASON="Fix branches must target 'dev', not '${BASE}'"
+ fi
+ ;;
+ hotfix/*)
+ if [ "$BASE" != "dev" ] && [ "$BASE" != "main" ]; then
+ ALLOWED=false
+ REASON="Hotfix branches can only target 'dev' or 'main', not '${BASE}'"
+ fi
+ ;;
+ alpha/*|beta/*)
+ if [ "$BASE" != "dev" ]; then
+ ALLOWED=false
+ REASON="Pre-release branches must target 'dev', not '${BASE}'"
+ fi
+ ;;
+ rc/*)
+ if [ "$BASE" != "main" ]; then
+ ALLOWED=false
+ REASON="Release candidate branches must target 'main', not '${BASE}'"
+ fi
+ ;;
+ dev)
+ if [ "$BASE" != "main" ]; then
+ ALLOWED=false
+ REASON="Dev branch can only merge into 'main', not '${BASE}'"
+ fi
+ ;;
+ esac
+
+ if [ "$ALLOWED" = false ]; then
+ echo "::error::${REASON}"
+ echo ""
+ echo "## Branch Policy Violation" >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo "${REASON}" >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo "### Allowed merge paths:" >> $GITHUB_STEP_SUMMARY
+ echo "- \`feature/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY
+ echo "- \`fix/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY
+ echo "- \`hotfix/*\` → \`dev\` or \`main\`" >> $GITHUB_STEP_SUMMARY
+ echo "- \`dev\` → \`main\`" >> $GITHUB_STEP_SUMMARY
+ echo "- \`rc/*\` → \`main\`" >> $GITHUB_STEP_SUMMARY
+ exit 1
+ fi
+
+ echo "Branch policy: OK (${HEAD} → ${BASE})"
+ echo "## Branch Policy: Passed" >> $GITHUB_STEP_SUMMARY
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000..d212449
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,41 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code when working with this repository.
+
+## Project Overview
+
+**joomla-api-mcp** -- MCP server for Joomla Web Services API operations
+
+| Field | Value |
+|---|---|
+| **Platform** | mcp-server |
+| **Language** | TypeScript |
+| **Default branch** | main |
+| **License** | GPL-3.0-or-later |
+| **Wiki** | [joomla-api-mcp Wiki](https://git.mokoconsulting.tech/MokoConsulting/joomla-api-mcp/wiki) |
+| **Standards** | [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/moko-platform/wiki/Home) |
+
+## Common Commands
+
+```bash
+npm install # Install dependencies
+npm run build # Compile TypeScript
+npm run dev # Development mode
+```
+
+## Architecture
+
+This is an MCP (Model Context Protocol) server. Key files:
+- `src/index.ts` -- server entry point and tool registration
+- `src/config.ts` -- configuration loading
+- `src/tools/` -- individual tool implementations
+- `dist/` -- compiled output (gitignored)
+
+## Rules
+
+- **Never commit** `.claude/`, `.mcp.json`, `TODO.md`, or `*.min.css`/`*.min.js`
+- **Attribution**: use `Authored-by: Moko Consulting` in commits
+- **Branch strategy**: develop on `dev`, merge to `main` for release
+- **Minification**: handled at build time (CI) and runtime (MokoMinifyHelper for Joomla templates)
+- **Wiki**: documentation lives in the Gitea wiki, not in `docs/` files
+- **Standards**: this repo follows [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/moko-platform/wiki/Home)
diff --git a/ROADMAP.md b/ROADMAP.md
deleted file mode 100644
index dc01995..0000000
--- a/ROADMAP.md
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-# [Project Name] Roadmap
-
-## Scope and Intent
-
-This document defines the roadmap for [Project Name] starting with version **[X.Y.Z]**. It establishes the sequencing, intent, and maturity expectations for deliverables governed by this project.
-
-This roadmap is forward-looking by design. Completed work prior to the current baseline version is considered foundational and is intentionally excluded. This file tracks **current and future-state development only**.
-
-## Version [X.Y.Z] — [Phase Name] ✅ COMPLETED / 🔄 IN PROGRESS / 📋 PLANNED
-
-Focus: [Brief description of this version's primary focus]
-
-### Completed Deliverables
-
-* ✅ **[Category Name]**
- * ✅ [Specific deliverable or feature]
- * ✅ [Specific deliverable or feature]
-* ✅ **[Category Name]**
- * ✅ [Specific deliverable or feature]
-
-### In Progress
-
-* 🔄 [Item currently being worked on]
-* 🔄 [Item currently being worked on]
-
-### Planned Deliverables
-
-* [Future planned item]
-* [Future planned item]
-
-### Achieved Outcomes
-
-* ✅ [Measurable outcome or benefit]
-* ✅ [Measurable outcome or benefit]
-* 🔄 [Partially achieved outcome]
-
-## Version [X.Y+1.Z] — [Next Phase Name]
-
-Focus: [Brief description of next version's primary focus]
-
-### In-Scope Deliverables
-
-* [Deliverable for next version]
-* [Deliverable for next version]
-
-### Outcomes
-
-* [Expected outcome or benefit]
-* [Expected outcome or benefit]
-
-## Version [X.Y+2.Z] — [Future Phase Name]
-
-Focus: [Brief description of future version's primary focus]
-
-### Planned Deliverables
-
-* [Future deliverable]
-* [Future deliverable]
-
-### Outcomes
-
-* [Expected outcome]
-* [Expected outcome]
-
-## Version [X.Y+3.Z] and Beyond — [Long-term Vision]
-
-Focus: [Long-term strategic direction]
-
-### Forward-Looking Initiatives
-
-* [Strategic initiative]
-* [Strategic initiative]
-
-### Outcomes
-
-* [Long-term goal]
-* [Long-term goal]
-
----
-
-This roadmap is intentionally conservative and additive. New versions extend prior guarantees without breaking existing contracts.
-
-## Guidelines for Version Planning
-
-### Version Numbering
-
-Use semantic versioning for clarity:
-- **Major versions** (X.0.0): Breaking changes, major architectural shifts
-- **Minor versions** (X.Y.0): New features, significant enhancements
-- **Patch versions** (X.Y.Z): Bug fixes, minor improvements
-
-### Planning Horizon
-
-- **Current Version**: Actively being delivered
-- **Next 2-3 Versions**: Clearly defined with specific deliverables
-- **Future Versions**: High-level themes and strategic direction
-
-### Status Indicators
-
-- ✅ **COMPLETED**: Delivered and validated
-- 🔄 **IN PROGRESS**: Active development underway
-- 📋 **PLANNED**: Scheduled but not yet started
-- ⏸️ **PAUSED**: Temporarily on hold
-- ❌ **CANCELLED**: No longer pursuing
-
-## Metadata
-
-```
-Owner: [Owner Name/Role]
-Reviewers: [Reviewer Names/Roles]
-Status: Active
-Last Updated: [YYYY-MM-DD]
-Next Review: [YYYY-MM-DD]
-```
-
-## Revision History
-
-| Date | Version | Author | Notes |
-| ---------- | -------- | -------------- | ------------------------------- |
-| YYYY-MM-DD | X.Y.Z | [Author Name] | [Description of changes] |
-| YYYY-MM-DD | X.Y.Z | [Author Name] | [Description of changes] |
diff --git a/renovate.json b/renovate.json
deleted file mode 100644
index 15c6a10..0000000
--- a/renovate.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "$schema": "https://docs.renovatebot.com/renovate-schema.json",
- "extends": [
- "config:recommended",
- "schedule:weekly",
- ":disableDependencyDashboard"
- ],
- "labels": ["dependencies"],
- "automerge": false,
- "platformAutomerge": false,
- "rangeStrategy": "bump",
- "packageRules": [
- {
- "matchUpdateTypes": ["patch"],
- "automerge": true
- },
- {
- "matchManagers": ["composer"],
- "enabled": true
- },
- {
- "matchManagers": ["npm"],
- "enabled": true
- }
- ]
-}