@mokoconsulting/mcp-windows 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/.gitattributes +94 -0
  2. package/.gitmessage +9 -0
  3. package/.mokogitea/ISSUE_TEMPLATE/adr.md +110 -0
  4. package/.mokogitea/ISSUE_TEMPLATE/bug_report.md +48 -0
  5. package/.mokogitea/ISSUE_TEMPLATE/config.yml +18 -0
  6. package/.mokogitea/ISSUE_TEMPLATE/documentation.md +52 -0
  7. package/.mokogitea/ISSUE_TEMPLATE/feature_request.md +51 -0
  8. package/.mokogitea/ISSUE_TEMPLATE/mcp_api_integration.md +48 -0
  9. package/.mokogitea/ISSUE_TEMPLATE/mcp_connection_issue.md +67 -0
  10. package/.mokogitea/ISSUE_TEMPLATE/mcp_tool_request.md +49 -0
  11. package/.mokogitea/ISSUE_TEMPLATE/question.md +82 -0
  12. package/.mokogitea/ISSUE_TEMPLATE/rfc.md +126 -0
  13. package/.mokogitea/ISSUE_TEMPLATE/security.md +51 -0
  14. package/.mokogitea/ISSUE_TEMPLATE/version.md +24 -0
  15. package/.mokogitea/branch-protection.yml +251 -0
  16. package/.mokogitea/workflows/auto-assign.yml +76 -0
  17. package/.mokogitea/workflows/auto-bump.yml +66 -0
  18. package/.mokogitea/workflows/auto-dev-issue.yml +207 -0
  19. package/.mokogitea/workflows/auto-release.yml +421 -0
  20. package/.mokogitea/workflows/branch-cleanup.yml +48 -0
  21. package/.mokogitea/workflows/cascade-dev.yml +10 -0
  22. package/.mokogitea/workflows/changelog-validation.yml +101 -0
  23. package/.mokogitea/workflows/ci-generic.yml +191 -0
  24. package/.mokogitea/workflows/cleanup.yml +87 -0
  25. package/.mokogitea/workflows/codeql-analysis.yml +115 -0
  26. package/.mokogitea/workflows/copilot-agent.yml +44 -0
  27. package/.mokogitea/workflows/deploy-manual.yml +126 -0
  28. package/.mokogitea/workflows/enterprise-firewall-setup.yml +758 -0
  29. package/.mokogitea/workflows/gitleaks.yml +92 -0
  30. package/.mokogitea/workflows/issue-branch.yml +73 -0
  31. package/.mokogitea/workflows/mcp-auto-release.yml +278 -0
  32. package/.mokogitea/workflows/mcp-build-test.yml +65 -0
  33. package/.mokogitea/workflows/mcp-sdk-check.yml +109 -0
  34. package/.mokogitea/workflows/mcp-tool-inventory.yml +61 -0
  35. package/.mokogitea/workflows/notify.yml +70 -0
  36. package/.mokogitea/workflows/npm-publish.yml +113 -0
  37. package/.mokogitea/workflows/pr-check.yml +534 -0
  38. package/.mokogitea/workflows/pre-release.yml +252 -0
  39. package/.mokogitea/workflows/rc-revert.yml +66 -0
  40. package/.mokogitea/workflows/repo-health.yml +712 -0
  41. package/.mokogitea/workflows/repository-cleanup.yml +525 -0
  42. package/.mokogitea/workflows/security-audit.yml +82 -0
  43. package/.mokogitea/workflows/standards-compliance.yml +2614 -0
  44. package/.mokogitea/workflows/sync-version-on-merge.yml +133 -0
  45. package/.mokogitea/workflows/update-server.yml +312 -0
  46. package/.mokogitea/workflows/workflow-sync-trigger.yml +73 -0
  47. package/CHANGELOG.md +130 -0
  48. package/CLAUDE.md +49 -0
  49. package/CONTRIBUTING.md +161 -0
  50. package/ISSUES.md +601 -0
  51. package/Makefile +70 -0
  52. package/README.md +80 -0
  53. package/automation/ci-issue-reporter.sh +237 -0
  54. package/config.example.json +18 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.js +111 -0
  57. package/dist/shell.d.ts +50 -0
  58. package/dist/shell.js +209 -0
  59. package/dist/tools/apps.d.ts +3 -0
  60. package/dist/tools/apps.js +63 -0
  61. package/dist/tools/audio.d.ts +3 -0
  62. package/dist/tools/audio.js +142 -0
  63. package/dist/tools/audio_apps.d.ts +3 -0
  64. package/dist/tools/audio_apps.js +86 -0
  65. package/dist/tools/automation.d.ts +3 -0
  66. package/dist/tools/automation.js +261 -0
  67. package/dist/tools/bluetooth.d.ts +3 -0
  68. package/dist/tools/bluetooth.js +96 -0
  69. package/dist/tools/clipboard.d.ts +3 -0
  70. package/dist/tools/clipboard.js +118 -0
  71. package/dist/tools/config.d.ts +3 -0
  72. package/dist/tools/config.js +85 -0
  73. package/dist/tools/dialog.d.ts +3 -0
  74. package/dist/tools/dialog.js +72 -0
  75. package/dist/tools/display.d.ts +3 -0
  76. package/dist/tools/display.js +256 -0
  77. package/dist/tools/drives.d.ts +3 -0
  78. package/dist/tools/drives.js +98 -0
  79. package/dist/tools/environment.d.ts +3 -0
  80. package/dist/tools/environment.js +129 -0
  81. package/dist/tools/execute.d.ts +3 -0
  82. package/dist/tools/execute.js +28 -0
  83. package/dist/tools/filesystem.d.ts +3 -0
  84. package/dist/tools/filesystem.js +230 -0
  85. package/dist/tools/firewall.d.ts +3 -0
  86. package/dist/tools/firewall.js +108 -0
  87. package/dist/tools/hosts.d.ts +3 -0
  88. package/dist/tools/hosts.js +119 -0
  89. package/dist/tools/maintenance.d.ts +3 -0
  90. package/dist/tools/maintenance.js +236 -0
  91. package/dist/tools/netstat.d.ts +3 -0
  92. package/dist/tools/netstat.js +56 -0
  93. package/dist/tools/network.d.ts +3 -0
  94. package/dist/tools/network.js +70 -0
  95. package/dist/tools/notification.d.ts +3 -0
  96. package/dist/tools/notification.js +41 -0
  97. package/dist/tools/power.d.ts +3 -0
  98. package/dist/tools/power.js +104 -0
  99. package/dist/tools/printer.d.ts +3 -0
  100. package/dist/tools/printer.js +97 -0
  101. package/dist/tools/process.d.ts +3 -0
  102. package/dist/tools/process.js +54 -0
  103. package/dist/tools/process_kill.d.ts +3 -0
  104. package/dist/tools/process_kill.js +48 -0
  105. package/dist/tools/recycle_bin.d.ts +3 -0
  106. package/dist/tools/recycle_bin.js +108 -0
  107. package/dist/tools/registry.d.ts +3 -0
  108. package/dist/tools/registry.js +136 -0
  109. package/dist/tools/scheduler.d.ts +3 -0
  110. package/dist/tools/scheduler.js +116 -0
  111. package/dist/tools/service.d.ts +3 -0
  112. package/dist/tools/service.js +79 -0
  113. package/dist/tools/startup.d.ts +3 -0
  114. package/dist/tools/startup.js +159 -0
  115. package/dist/tools/storage.d.ts +3 -0
  116. package/dist/tools/storage.js +129 -0
  117. package/dist/tools/system.d.ts +3 -0
  118. package/dist/tools/system.js +84 -0
  119. package/dist/tools/system_mgmt.d.ts +3 -0
  120. package/dist/tools/system_mgmt.js +174 -0
  121. package/dist/tools/terminal.d.ts +3 -0
  122. package/dist/tools/terminal.js +80 -0
  123. package/dist/tools/theme.d.ts +3 -0
  124. package/dist/tools/theme.js +165 -0
  125. package/dist/tools/usb.d.ts +3 -0
  126. package/dist/tools/usb.js +52 -0
  127. package/dist/tools/virtual_desktop.d.ts +3 -0
  128. package/dist/tools/virtual_desktop.js +112 -0
  129. package/dist/tools/wifi.d.ts +3 -0
  130. package/dist/tools/wifi.js +136 -0
  131. package/dist/tools/window.d.ts +3 -0
  132. package/dist/tools/window.js +189 -0
  133. package/dist/tools/winget.d.ts +3 -0
  134. package/dist/tools/winget.js +79 -0
  135. package/dist/tools/wsl.d.ts +3 -0
  136. package/dist/tools/wsl.js +99 -0
  137. package/docs/API.md +63 -0
  138. package/docs/ARCHITECTURE.md +73 -0
  139. package/docs/INSTALLATION.md +102 -0
  140. package/docs/index.md +12 -0
  141. package/package.json +35 -0
  142. package/scripts/setup.mjs +123 -0
  143. package/src/index.ts +125 -0
  144. package/src/shell.ts +253 -0
  145. package/src/tools/apps.ts +76 -0
  146. package/src/tools/audio.ts +161 -0
  147. package/src/tools/audio_apps.ts +98 -0
  148. package/src/tools/automation.ts +297 -0
  149. package/src/tools/bluetooth.ts +114 -0
  150. package/src/tools/clipboard.ts +138 -0
  151. package/src/tools/config.ts +105 -0
  152. package/src/tools/dialog.ts +87 -0
  153. package/src/tools/display.ts +285 -0
  154. package/src/tools/drives.ts +124 -0
  155. package/src/tools/environment.ts +146 -0
  156. package/src/tools/execute.ts +35 -0
  157. package/src/tools/filesystem.ts +273 -0
  158. package/src/tools/firewall.ts +125 -0
  159. package/src/tools/hosts.ts +135 -0
  160. package/src/tools/maintenance.ts +299 -0
  161. package/src/tools/netstat.ts +72 -0
  162. package/src/tools/network.ts +84 -0
  163. package/src/tools/notification.ts +50 -0
  164. package/src/tools/power.ts +123 -0
  165. package/src/tools/printer.ts +114 -0
  166. package/src/tools/process.ts +80 -0
  167. package/src/tools/process_kill.ts +57 -0
  168. package/src/tools/recycle_bin.ts +126 -0
  169. package/src/tools/registry.ts +165 -0
  170. package/src/tools/scheduler.ts +140 -0
  171. package/src/tools/service.ts +102 -0
  172. package/src/tools/startup.ts +180 -0
  173. package/src/tools/storage.ts +141 -0
  174. package/src/tools/system.ts +99 -0
  175. package/src/tools/system_mgmt.ts +190 -0
  176. package/src/tools/terminal.ts +117 -0
  177. package/src/tools/theme.ts +205 -0
  178. package/src/tools/usb.ts +65 -0
  179. package/src/tools/virtual_desktop.ts +122 -0
  180. package/src/tools/wifi.ts +157 -0
  181. package/src/tools/window.ts +211 -0
  182. package/src/tools/winget.ts +100 -0
  183. package/src/tools/wsl.ts +112 -0
  184. package/tsconfig.json +19 -0
package/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # Template-MCP
2
+
3
+ ![Language](https://img.shields.io/badge/language-TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white) ![License](https://img.shields.io/badge/license-GPL--3.0--or--later-green?style=flat-square) ![Platform](https://img.shields.io/badge/platform-Node.js%20%7C%20MCP-339933?style=flat-square&logo=node.js&logoColor=white) ![Wiki](https://img.shields.io/badge/wiki-Template--MCP-blue?style=flat-square)
4
+
5
+ Template repository for creating MokoCLI-compliant Model Context Protocol (MCP) API servers. Provides the scaffolding, configuration patterns, and architecture conventions used by all Moko Consulting MCP servers, enabling AI assistants like Claude to interact with REST APIs through a standardized tool interface.
6
+
7
+ ## Features
8
+
9
+ - **MCP server scaffolding** -- pre-configured TypeScript project structure with entry point, tool registration, and stdio transport ready to go
10
+ - **Multi-connection support** -- built-in `config.json` pattern for managing multiple named API connections with a default fallback; all tools accept an optional `connection` parameter
11
+ - **REST API bridge architecture** -- standardized pattern for bridging any REST API as MCP tools, with typed request/response handling
12
+ - **TypeScript-first** -- full TypeScript setup with `tsconfig.json`, strict mode, and ES module output
13
+ - **Build tooling** -- Makefile with `build`, `dev`, `clean`, and `lint` targets; npm scripts for compilation and development
14
+ - **MokoCLI compliant** -- follows all Moko Consulting governance conventions: file headers, commit messages, `.gitattributes`, `.gitmessage`, PR/issue templates
15
+ - **Example configuration** -- `config.example.json` demonstrates the connection configuration schema
16
+ - **Documentation templates** -- wiki pages for API reference, architecture overview, and installation pre-generated
17
+
18
+ ## Installation
19
+
20
+ 1. Create a new repository from this template (or clone directly):
21
+ ```bash
22
+ git clone https://git.mokoconsulting.tech/MokoConsulting/Template-MCP.git my-mcp-server
23
+ cd my-mcp-server
24
+ ```
25
+ 2. Install dependencies:
26
+ ```bash
27
+ npm install
28
+ ```
29
+ 3. Copy and configure the connection file:
30
+ ```bash
31
+ cp config.example.json config.json
32
+ # Edit config.json with your API credentials
33
+ ```
34
+ 4. Build the project:
35
+ ```bash
36
+ npm run build
37
+ ```
38
+ 5. Run the server:
39
+ ```bash
40
+ node build/index.js
41
+ ```
42
+
43
+ ## Configuration
44
+
45
+ | Path | Purpose |
46
+ |---|---|
47
+ | `src/` | TypeScript source files (server entry, tool definitions, API client) |
48
+ | `config.example.json` | Example multi-connection configuration schema |
49
+ | `config.json` | Local connection configuration (gitignored) |
50
+ | `package.json` | npm dependencies and scripts |
51
+ | `tsconfig.json` | TypeScript compiler configuration |
52
+ | `scripts/` | Build and development utility scripts |
53
+ | `docs/` | Developer documentation |
54
+ | `Makefile` | Build, dev, clean, and lint targets |
55
+
56
+ ## Requirements
57
+
58
+ - Node.js 20.0.0 or later
59
+ - npm 9+
60
+ - TypeScript 5+ (installed via npm)
61
+
62
+ ## Documentation
63
+
64
+ Full documentation is available on the [Wiki](https://git.mokoconsulting.tech/MokoConsulting/Template-MCP/wiki), including:
65
+
66
+ - [API](https://git.mokoconsulting.tech/MokoConsulting/Template-MCP/wiki/API) -- tool reference and connection parameter documentation
67
+ - [ARCHITECTURE](https://git.mokoconsulting.tech/MokoConsulting/Template-MCP/wiki/ARCHITECTURE) -- MCP server design and REST API bridge pattern
68
+ - [INSTALLATION](https://git.mokoconsulting.tech/MokoConsulting/Template-MCP/wiki/INSTALLATION) -- setup prerequisites and configuration guide
69
+
70
+ ## Contributing
71
+
72
+ See the wiki for development guidelines and contribution instructions.
73
+
74
+ ## License
75
+
76
+ This project is licensed under the GNU General Public License v3.0 or later -- see the [LICENSE](LICENSE) file.
77
+
78
+ ---
79
+
80
+ *[Moko Consulting](https://mokoconsulting.tech) -- [MokoCLI](https://git.mokoconsulting.tech/MokoConsulting/mokocli)*
@@ -0,0 +1,237 @@
1
+ #!/usr/bin/env bash
2
+ # ============================================================================
3
+ # Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
4
+ #
5
+ # SPDX-License-Identifier: GPL-3.0-or-later
6
+ #
7
+ # FILE INFORMATION
8
+ # DEFGROUP: Automation.CI
9
+ # INGROUP: moko-platform.Automation
10
+ # REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform
11
+ # PATH: /automation/ci-issue-reporter.sh
12
+ # VERSION: 09.23.00
13
+ # BRIEF: Creates or updates a Gitea issue when a CI gate fails.
14
+ # Deduplicates by searching open issues with the "ci-auto" label
15
+ # whose title matches the gate. If a matching issue exists, a comment
16
+ # is appended instead of opening a duplicate.
17
+ # ============================================================================
18
+
19
+ set -euo pipefail
20
+
21
+ # ── Defaults ────────────────────────────────────────────────────────────────
22
+ GITEA_URL="${GITEA_URL:-https://git.mokoconsulting.tech}"
23
+ GITEA_TOKEN="${GITEA_TOKEN:-}"
24
+ REPO="${GITHUB_REPOSITORY:-}"
25
+ RUN_URL="${GITHUB_SERVER_URL:-${GITEA_URL}}/${REPO}/actions/runs/${GITHUB_RUN_ID:-0}"
26
+ LABEL_NAME="ci-auto"
27
+ LABEL_COLOR="#e11d48"
28
+
29
+ GATE=""
30
+ DETAILS=""
31
+ SEVERITY="error"
32
+ WORKFLOW=""
33
+
34
+ # ── Parse arguments ─────────────────────────────────────────────────────────
35
+ usage() {
36
+ cat <<EOF
37
+ Usage: ci-issue-reporter.sh --gate NAME --details TEXT [OPTIONS]
38
+
39
+ Required:
40
+ --gate CI gate name (e.g. "Code Quality", "Self-Health")
41
+ --details Human-readable failure description
42
+
43
+ Optional:
44
+ --severity "error" (default) or "warning"
45
+ --workflow Workflow name for the issue title
46
+ --repo owner/repo (default: \$GITHUB_REPOSITORY)
47
+ --run-url URL to the CI run (auto-detected from env)
48
+ --token Gitea API token (default: \$GITEA_TOKEN)
49
+ --url Gitea base URL (default: \$GITEA_URL)
50
+ EOF
51
+ exit 1
52
+ }
53
+
54
+ while [[ $# -gt 0 ]]; do
55
+ case "$1" in
56
+ --gate) GATE="$2"; shift 2 ;;
57
+ --details) DETAILS="$2"; shift 2 ;;
58
+ --severity) SEVERITY="$2"; shift 2 ;;
59
+ --workflow) WORKFLOW="$2"; shift 2 ;;
60
+ --repo) REPO="$2"; shift 2 ;;
61
+ --run-url) RUN_URL="$2"; shift 2 ;;
62
+ --token) GITEA_TOKEN="$2"; shift 2 ;;
63
+ --url) GITEA_URL="$2"; shift 2 ;;
64
+ -h|--help) usage ;;
65
+ *) echo "Unknown option: $1"; usage ;;
66
+ esac
67
+ done
68
+
69
+ [[ -z "$GATE" ]] && { echo "ERROR: --gate is required"; usage; }
70
+ [[ -z "$DETAILS" ]] && { echo "ERROR: --details is required"; usage; }
71
+ [[ -z "$GITEA_TOKEN" ]] && { echo "ERROR: GITEA_TOKEN not set"; exit 1; }
72
+ [[ -z "$REPO" ]] && { echo "ERROR: GITHUB_REPOSITORY not set"; exit 1; }
73
+
74
+ API="${GITEA_URL}/api/v1/repos/${REPO}"
75
+
76
+ # ── Build title ─────────────────────────────────────────────────────────────
77
+ if [[ -n "$WORKFLOW" ]]; then
78
+ TITLE="[CI] ${WORKFLOW}: ${GATE} failed"
79
+ else
80
+ TITLE="[CI] ${GATE} failed"
81
+ fi
82
+
83
+ # ── Ensure label exists ─────────────────────────────────────────────────────
84
+ ensure_label() {
85
+ local exists
86
+ exists=$(curl -sf -o /dev/null -w '%{http_code}' \
87
+ -H "Authorization: token ${GITEA_TOKEN}" \
88
+ "${API}/labels" 2>/dev/null || echo "000")
89
+
90
+ if [[ "$exists" == "200" ]]; then
91
+ # Check if label already exists
92
+ local found
93
+ found=$(curl -sf \
94
+ -H "Authorization: token ${GITEA_TOKEN}" \
95
+ "${API}/labels" 2>/dev/null \
96
+ | grep -o "\"name\":\"${LABEL_NAME}\"" || true)
97
+
98
+ if [[ -z "$found" ]]; then
99
+ curl -sf -X POST \
100
+ -H "Authorization: token ${GITEA_TOKEN}" \
101
+ -H "Content-Type: application/json" \
102
+ "${API}/labels" \
103
+ -d "{\"name\":\"${LABEL_NAME}\",\"color\":\"${LABEL_COLOR}\",\"description\":\"Auto-created by CI issue reporter\"}" \
104
+ > /dev/null 2>&1 || true
105
+ fi
106
+ fi
107
+ }
108
+
109
+ # ── Search for existing open issue ──────────────────────────────────────────
110
+ find_existing_issue() {
111
+ # URL-encode the gate name for the query
112
+ local query
113
+ query=$(printf '%s' "[CI] ${GATE}" | sed 's/ /%20/g; s/\[/%5B/g; s/\]/%5D/g')
114
+
115
+ local response
116
+ response=$(curl -sf \
117
+ -H "Authorization: token ${GITEA_TOKEN}" \
118
+ "${API}/issues?type=issues&state=open&labels=${LABEL_NAME}&q=${query}&limit=5" \
119
+ 2>/dev/null || echo "[]")
120
+
121
+ # Extract the first matching issue number
122
+ echo "$response" \
123
+ | grep -oP '"number":\s*\K[0-9]+' \
124
+ | head -1
125
+ }
126
+
127
+ # ── Build issue body ────────────────────────────────────────────────────────
128
+ build_body() {
129
+ local severity_badge
130
+ if [[ "$SEVERITY" == "error" ]]; then
131
+ severity_badge="**Severity:** Error"
132
+ else
133
+ severity_badge="**Severity:** Warning"
134
+ fi
135
+
136
+ cat <<BODY
137
+ ## CI Gate Failure: ${GATE}
138
+
139
+ ${severity_badge}
140
+ **Workflow:** ${WORKFLOW:-unknown}
141
+ **Branch:** ${GITHUB_REF_NAME:-unknown}
142
+ **Commit:** \`${GITHUB_SHA:0:8}\`
143
+ **Run:** [View CI run](${RUN_URL})
144
+
145
+ ### Details
146
+
147
+ ${DETAILS}
148
+
149
+ ### Resolution
150
+
151
+ Fix the issue described above and push a new commit. This issue will be closed automatically when the gate passes, or can be closed manually.
152
+
153
+ ---
154
+ *Auto-created by [ci-issue-reporter](${GITEA_URL}/${REPO}/src/branch/main/automation/ci-issue-reporter.sh)*
155
+ BODY
156
+ }
157
+
158
+ # ── Build comment body (for existing issues) ────────────────────────────────
159
+ build_comment() {
160
+ cat <<COMMENT
161
+ ### CI failure recurrence
162
+
163
+ **Branch:** ${GITHUB_REF_NAME:-unknown}
164
+ **Commit:** \`${GITHUB_SHA:0:8}\`
165
+ **Run:** [View CI run](${RUN_URL})
166
+
167
+ ${DETAILS}
168
+ COMMENT
169
+ }
170
+
171
+ # ── Main ────────────────────────────────────────────────────────────────────
172
+ ensure_label
173
+
174
+ EXISTING=$(find_existing_issue)
175
+
176
+ if [[ -n "$EXISTING" ]]; then
177
+ # Append comment to existing issue
178
+ COMMENT_BODY=$(build_comment)
179
+ COMMENT_JSON=$(printf '%s' "$COMMENT_BODY" | python3 -c "
180
+ import sys, json
181
+ print(json.dumps({'body': sys.stdin.read()}))" 2>/dev/null)
182
+
183
+ HTTP=$(curl -sf -o /dev/null -w '%{http_code}' -X POST \
184
+ -H "Authorization: token ${GITEA_TOKEN}" \
185
+ -H "Content-Type: application/json" \
186
+ "${API}/issues/${EXISTING}/comments" \
187
+ -d "${COMMENT_JSON}" 2>/dev/null || echo "000")
188
+
189
+ if [[ "$HTTP" == "201" ]]; then
190
+ echo "Commented on existing issue #${EXISTING}"
191
+ else
192
+ echo "WARNING: Failed to comment on issue #${EXISTING} (HTTP ${HTTP})"
193
+ fi
194
+ else
195
+ # Create new issue
196
+ ISSUE_BODY=$(build_body)
197
+ ISSUE_JSON=$(python3 -c "
198
+ import sys, json
199
+ body = sys.stdin.read()
200
+ print(json.dumps({
201
+ 'title': sys.argv[1],
202
+ 'body': body,
203
+ 'labels': []
204
+ }))" "$TITLE" <<< "$ISSUE_BODY" 2>/dev/null)
205
+
206
+ # Create the issue
207
+ RESPONSE=$(curl -sf -X POST \
208
+ -H "Authorization: token ${GITEA_TOKEN}" \
209
+ -H "Content-Type: application/json" \
210
+ "${API}/issues" \
211
+ -d "${ISSUE_JSON}" 2>/dev/null || echo "{}")
212
+
213
+ ISSUE_NUM=$(echo "$RESPONSE" | grep -oP '"number":\s*\K[0-9]+' | head -1)
214
+
215
+ if [[ -n "$ISSUE_NUM" ]]; then
216
+ # Apply label (separate call — more reliable across Gitea versions)
217
+ LABEL_ID=$(curl -sf \
218
+ -H "Authorization: token ${GITEA_TOKEN}" \
219
+ "${API}/labels" 2>/dev/null \
220
+ | grep -oP "\"id\":\s*\K[0-9]+(?=[^}]*\"name\":\s*\"${LABEL_NAME}\")" \
221
+ | head -1 || true)
222
+
223
+ if [[ -n "$LABEL_ID" ]]; then
224
+ curl -sf -X POST \
225
+ -H "Authorization: token ${GITEA_TOKEN}" \
226
+ -H "Content-Type: application/json" \
227
+ "${API}/issues/${ISSUE_NUM}/labels" \
228
+ -d "{\"labels\":[${LABEL_ID}]}" \
229
+ > /dev/null 2>&1 || true
230
+ fi
231
+
232
+ echo "Created issue #${ISSUE_NUM}: ${TITLE}"
233
+ else
234
+ echo "WARNING: Failed to create issue"
235
+ echo "Response: ${RESPONSE}"
236
+ fi
237
+ fi
@@ -0,0 +1,18 @@
1
+ {
2
+ "defaultConnection": "production",
3
+ "connections": {
4
+ "local-dev": {
5
+ "baseUrl": "https://localhost:8080",
6
+ "apiKey": "your-api-key-here",
7
+ "insecure": true
8
+ },
9
+ "production": {
10
+ "baseUrl": "https://api.example.com",
11
+ "apiKey": "your-production-api-key"
12
+ },
13
+ "staging": {
14
+ "baseUrl": "https://api-staging.example.com",
15
+ "apiKey": "your-staging-api-key"
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
package/dist/index.js ADDED
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env node
2
+ /* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
3
+ * SPDX-License-Identifier: GPL-3.0-or-later
4
+ *
5
+ * mcp_windows — MCP server for Windows desktop system operations
6
+ */
7
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
9
+ import { registerExecuteTools } from './tools/execute.js';
10
+ import { registerProcessTools } from './tools/process.js';
11
+ import { registerAudioTools } from './tools/audio.js';
12
+ import { registerSystemTools } from './tools/system.js';
13
+ import { registerTerminalTools } from './tools/terminal.js';
14
+ import { registerFilesystemTools } from './tools/filesystem.js';
15
+ import { registerProcessKillTools } from './tools/process_kill.js';
16
+ import { registerServiceTools } from './tools/service.js';
17
+ import { registerAudioAppTools } from './tools/audio_apps.js';
18
+ import { registerPowerTools } from './tools/power.js';
19
+ import { registerNetworkTools } from './tools/network.js';
20
+ import { registerDriveTools } from './tools/drives.js';
21
+ import { registerDisplayTools } from './tools/display.js';
22
+ import { registerWindowTools } from './tools/window.js';
23
+ import { registerClipboardTools } from './tools/clipboard.js';
24
+ import { registerNotificationTools } from './tools/notification.js';
25
+ import { registerSchedulerTools } from './tools/scheduler.js';
26
+ import { registerRegistryTools } from './tools/registry.js';
27
+ import { registerEnvironmentTools } from './tools/environment.js';
28
+ import { registerStartupTools } from './tools/startup.js';
29
+ import { registerConfigTools } from './tools/config.js';
30
+ import { registerAppsTools } from './tools/apps.js';
31
+ import { registerDialogTools } from './tools/dialog.js';
32
+ import { registerNetstatTools } from './tools/netstat.js';
33
+ import { registerRecycleBinTools } from './tools/recycle_bin.js';
34
+ import { registerBluetoothTools } from './tools/bluetooth.js';
35
+ import { registerWifiTools } from './tools/wifi.js';
36
+ import { registerUsbTools } from './tools/usb.js';
37
+ import { registerPrinterTools } from './tools/printer.js';
38
+ import { registerHostsTools } from './tools/hosts.js';
39
+ import { registerThemeTools } from './tools/theme.js';
40
+ import { registerVirtualDesktopTools } from './tools/virtual_desktop.js';
41
+ import { registerFirewallTools } from './tools/firewall.js';
42
+ import { registerMaintenanceTools } from './tools/maintenance.js';
43
+ import { registerWslTools } from './tools/wsl.js';
44
+ import { registerWingetTools } from './tools/winget.js';
45
+ import { registerStorageTools } from './tools/storage.js';
46
+ import { registerSystemMgmtTools } from './tools/system_mgmt.js';
47
+ import { registerAutomationTools } from './tools/automation.js';
48
+ const server = new McpServer({
49
+ name: 'mcp_windows',
50
+ version: '3.0.0',
51
+ });
52
+ // v1.0 — Core
53
+ registerExecuteTools(server);
54
+ registerProcessTools(server);
55
+ registerAudioTools(server);
56
+ registerSystemTools(server);
57
+ registerTerminalTools(server);
58
+ registerFilesystemTools(server);
59
+ // v1.1 — System Control
60
+ registerProcessKillTools(server);
61
+ registerServiceTools(server);
62
+ registerAudioAppTools(server);
63
+ registerPowerTools(server);
64
+ registerNetworkTools(server);
65
+ registerDriveTools(server);
66
+ // v1.2 — Desktop Automation
67
+ registerDisplayTools(server);
68
+ registerWindowTools(server);
69
+ registerClipboardTools(server);
70
+ registerNotificationTools(server);
71
+ // v1.3 — Admin Tools
72
+ registerSchedulerTools(server);
73
+ registerRegistryTools(server);
74
+ registerEnvironmentTools(server);
75
+ registerStartupTools(server);
76
+ registerConfigTools(server);
77
+ // v1.4 — Advanced
78
+ registerAppsTools(server);
79
+ registerDialogTools(server);
80
+ registerNetstatTools(server);
81
+ registerRecycleBinTools(server);
82
+ // v2.0 — Connectivity & Hardware
83
+ registerBluetoothTools(server);
84
+ registerWifiTools(server);
85
+ registerUsbTools(server);
86
+ registerPrinterTools(server);
87
+ registerHostsTools(server);
88
+ // v2.1 — Appearance & Desktop
89
+ registerThemeTools(server);
90
+ registerVirtualDesktopTools(server);
91
+ // v2.2 — Security & Maintenance
92
+ registerFirewallTools(server);
93
+ registerMaintenanceTools(server);
94
+ // v3.0 — WSL & Package Management
95
+ registerWslTools(server);
96
+ registerWingetTools(server);
97
+ // v3.1 — Storage & System Management
98
+ registerStorageTools(server);
99
+ registerSystemMgmtTools(server);
100
+ // v3.2 — Automation & Advanced
101
+ registerAutomationTools(server);
102
+ async function main() {
103
+ const transport = new StdioServerTransport();
104
+ await server.connect(transport);
105
+ process.stderr.write('mcp_windows: server started\n');
106
+ }
107
+ main().catch((err) => {
108
+ process.stderr.write(`mcp_windows: fatal error: ${err}\n`);
109
+ process.exit(1);
110
+ });
111
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env node
2
+ import { ChildProcess } from 'node:child_process';
3
+ export interface ShellResult {
4
+ stdout: string;
5
+ stderr: string;
6
+ exitCode: number;
7
+ }
8
+ /**
9
+ * Run a PowerShell command and return stdout/stderr/exitCode.
10
+ * Commands are wrapped with -NoProfile -NonInteractive for speed and safety.
11
+ */
12
+ export declare function runPowerShell(command: string, options?: {
13
+ timeout?: number;
14
+ cwd?: string;
15
+ }): Promise<ShellResult>;
16
+ /**
17
+ * Run a PowerShell command that returns JSON. Wraps output with ConvertTo-Json
18
+ * and parses the result.
19
+ */
20
+ export declare function runPowerShellJson<T = unknown>(command: string, options?: {
21
+ timeout?: number;
22
+ cwd?: string;
23
+ }): Promise<T>;
24
+ /**
25
+ * Run a generic shell command (cmd, bash, pwsh).
26
+ */
27
+ export declare function runShell(command: string, options?: {
28
+ shell?: 'pwsh' | 'cmd' | 'bash';
29
+ timeout?: number;
30
+ cwd?: string;
31
+ }): Promise<ShellResult>;
32
+ export interface TerminalSession {
33
+ pid: number;
34
+ shell: string;
35
+ process: ChildProcess;
36
+ output: string[];
37
+ startedAt: Date;
38
+ }
39
+ export declare function startSession(shell?: 'pwsh' | 'cmd' | 'bash' | 'python' | 'node' | 'wsl'): TerminalSession;
40
+ export declare function sendToSession(pid: number, input: string): void;
41
+ export declare function readSessionOutput(pid: number, offset?: number, length?: number): string[];
42
+ export declare function listSessions(): Array<{
43
+ pid: number;
44
+ shell: string;
45
+ running: boolean;
46
+ lines: number;
47
+ startedAt: string;
48
+ }>;
49
+ export declare function terminateSession(pid: number): boolean;
50
+ //# sourceMappingURL=shell.d.ts.map