xserver-mcp 1.2.0 → 1.3.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../core/src/index.ts","../../../shared/src/api-client.ts","../../core/src/helper.ts","../../core/src/tools/server/server-info.ts","../../core/src/tools/server/cron.ts","../../core/src/tools/server/ssh.ts","../../core/src/tools/server/wordpress.ts","../../core/src/tools/server/mail.ts","../../core/src/tools/server/auto-reply.ts","../../core/src/tools/server/smtp-abroad-restriction.ts","../../core/src/tools/server/dkim.ts","../../core/src/tools/server/dmarc.ts","../../core/src/tools/server/spf.ts","../../core/src/tools/server/spam-filter.ts","../../core/src/tools/server/ftp.ts","../../core/src/tools/server/database.ts","../../core/src/tools/server/domain.ts","../../core/src/tools/server/ssl-dns.ts","../../core/src/tools/server/resource-monitor.ts","../../core/src/tools/server/waf.ts","../../core/src/tools/server/php-ini.ts","../../core/src/tools/server/wordpress-security.ts","../../core/src/tools/server/x-accelerator.ts","../../core/src/tools/server/server-cache.ts","../../core/src/tools/server/browser-cache.ts","../../core/src/tools/server/url-redirect.ts","../../core/src/tools/server/access-deny.ts","../../core/src/tools/server/xpagespeed.ts","../../core/src/tools/server/auto-backup.ts","../../core/src/tools/server/mysql-backup.ts","../../core/src/tools/index.ts","../package.json","../src/index.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\r\nimport { ApiClient } from 'xnp-shared';\r\nimport type { BrandConfig } from 'xnp-shared';\r\nimport { registerAllTools } from './tools/index.js';\r\n\r\nexport type { BrandConfig } from 'xnp-shared';\r\n\r\nexport interface RunOptions {\r\n /** MCPサーバー名(package.json の name と揃える。例: 'xserver-mcp') */\r\n name: string;\r\n /** MCPサーバーバージョン(package.json の version) */\r\n version: string;\r\n}\r\n\r\nexport async function run(brand: BrandConfig, options: RunOptions): Promise<void> {\r\n const envPrefix = brand.brand.toUpperCase();\r\n const apiKey = process.env[`${envPrefix}_API_KEY`] ?? process.env['XSERVER_API_KEY'];\r\n const servername = process.env[`${envPrefix}_SERVERNAME`] ?? process.env['XSERVER_SERVERNAME'];\r\n const baseUrl = process.env[`${envPrefix}_API_BASE_URL`];\r\n\r\n if (!apiKey) {\r\n console.error(`Error: ${envPrefix}_API_KEY environment variable is required.`);\r\n console.error(`Get your API key at the ${brand.displayName} control panel.`);\r\n process.exit(1);\r\n }\r\n\r\n if (!servername) {\r\n console.error(`Error: ${envPrefix}_SERVERNAME environment variable is required.`);\r\n process.exit(1);\r\n }\r\n\r\n const client = new ApiClient({\r\n apiKey,\r\n apiBase: baseUrl ?? brand.apiBase,\r\n servername,\r\n });\r\n\r\n const server = new McpServer({\r\n name: options.name,\r\n version: options.version,\r\n }, {\r\n instructions: `${brand.displayName} MCP Server — ${brand.displayName}のレンタルサーバーを管理するためのMCPサーバーです。\r\n\r\nサーバー情報の取得、ドメイン・サブドメインの追加、SSL設定、WordPress管理、\r\nメールアカウント管理、FTPアカウント管理、MySQL管理、Cron設定、SSH設定、\r\nDNSレコード管理、PHPバージョン変更、ログ確認などが可能です。\r\n\r\n操作前に現在の状態を確認(list/get系ツール)してから変更を行うことを推奨します。\r\n破壊的操作(delete系)は実行前にユーザーに確認を取ってください。`,\r\n });\r\n\r\n registerAllTools(server, client, brand);\r\n\r\n const transport = new StdioServerTransport();\r\n await server.connect(transport);\r\n}\r\n","const DEFAULT_TIMEOUT_MS = 30_000;\r\n\r\nexport interface ApiErrorDetail {\r\n code: string;\r\n message: string;\r\n errors: string[];\r\n httpStatus: number;\r\n}\r\n\r\nexport class ApiError extends Error {\r\n constructor(\r\n message: string,\r\n public readonly httpStatus: number,\r\n public readonly errorCode: string,\r\n public readonly errors: string[],\r\n ) {\r\n super(message);\r\n this.name = 'ApiError';\r\n }\r\n}\r\n\r\nexport interface RateLimitInfo {\r\n limit: number;\r\n remaining: number;\r\n reset: number;\r\n}\r\n\r\nexport interface ApiClientOptions {\r\n apiKey: string;\r\n apiBase: string;\r\n servername?: string;\r\n debug?: boolean;\r\n}\r\n\r\nexport class ApiClient {\r\n private readonly apiBase: string;\r\n private readonly apiKey: string;\r\n private readonly servername?: string;\r\n private readonly debug: boolean;\r\n public lastRateLimit: RateLimitInfo | null = null;\r\n\r\n constructor(opts: ApiClientOptions) {\r\n this.apiBase = opts.apiBase.replace(/\\/+$/, '');\r\n this.apiKey = opts.apiKey;\r\n this.servername = opts.servername;\r\n this.debug = opts.debug ?? false;\r\n }\r\n\r\n private serverPath(): string {\r\n if (!this.servername) {\r\n throw new Error('サーバー名が設定されていません。');\r\n }\r\n return `/v1/server/${encodeURIComponent(this.servername)}`;\r\n }\r\n\r\n // ================================================================\r\n // サーバー情報\r\n // ================================================================\r\n\r\n async getServerInfo(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/server-info`);\r\n }\r\n\r\n async getServerUsage(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/server-info/usage`);\r\n }\r\n\r\n // ================================================================\r\n // Cron\r\n // ================================================================\r\n\r\n async listCron(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/cron`);\r\n }\r\n\r\n async addCron(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/cron`, data);\r\n }\r\n\r\n async updateCron(cronId: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/cron/${enc(cronId)}`, data);\r\n }\r\n\r\n async deleteCron(cronId: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/cron/${enc(cronId)}`);\r\n }\r\n\r\n // ================================================================\r\n // WordPress\r\n // ================================================================\r\n\r\n async listWordpress(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/wp`, params);\r\n }\r\n\r\n async addWordpress(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/wp`, data);\r\n }\r\n\r\n async updateWordpress(wpId: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/wp/${enc(wpId)}`, data);\r\n }\r\n\r\n async deleteWordpress(wpId: string, data?: Record<string, unknown>): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/wp/${enc(wpId)}`, data);\r\n }\r\n\r\n // ================================================================\r\n // メールアカウント\r\n // ================================================================\r\n\r\n async listMail(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/mail`, params);\r\n }\r\n\r\n async getMail(mailAccount: string): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/mail/${enc(mailAccount)}`);\r\n }\r\n\r\n async addMail(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/mail`, data);\r\n }\r\n\r\n async updateMail(mailAccount: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/mail/${enc(mailAccount)}`, data);\r\n }\r\n\r\n async deleteMail(mailAccount: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/mail/${enc(mailAccount)}`);\r\n }\r\n\r\n async getMailForwarding(mailAccount: string): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/mail/${enc(mailAccount)}/forwarding`);\r\n }\r\n\r\n async updateMailForwarding(mailAccount: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/mail/${enc(mailAccount)}/forwarding`, data);\r\n }\r\n\r\n // ================================================================\r\n // メール振り分け\r\n // ================================================================\r\n\r\n async listMailFilter(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/mail-filter`, params);\r\n }\r\n\r\n async addMailFilter(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/mail-filter`, data);\r\n }\r\n\r\n async deleteMailFilter(filterId: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/mail-filter/${enc(filterId)}`);\r\n }\r\n\r\n // ================================================================\r\n // 迷惑メールフィルタ設定\r\n // ================================================================\r\n\r\n async listSpamFilter(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/spam-filter`, params);\r\n }\r\n\r\n async updateSpamFilter(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/spam-filter/${enc(domain)}`, data);\r\n }\r\n\r\n async updateSpamFilterDmarcReceiver(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/spam-filter/${enc(domain)}/dmarc-receiver`, data);\r\n }\r\n\r\n // ================================================================\r\n // 自動応答設定\r\n // ================================================================\r\n\r\n async listAutoReply(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/auto-reply`, params);\r\n }\r\n\r\n async getAutoReply(mailAddress: string): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/auto-reply/${enc(mailAddress)}`);\r\n }\r\n\r\n async addAutoReply(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/auto-reply`, data);\r\n }\r\n\r\n async updateAutoReply(mailAddress: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/auto-reply/${enc(mailAddress)}`, data);\r\n }\r\n\r\n async deleteAutoReply(mailAddress: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/auto-reply/${enc(mailAddress)}`);\r\n }\r\n\r\n // ================================================================\r\n // SMTP認証国外アクセス制限\r\n // ================================================================\r\n\r\n async listSmtpAbroadRestriction(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/smtp-abroad-restriction`, params);\r\n }\r\n\r\n async updateSmtpAbroadRestriction(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/smtp-abroad-restriction/${enc(domain)}`, data);\r\n }\r\n\r\n // ================================================================\r\n // DKIM設定\r\n // ================================================================\r\n\r\n async listDkim(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/dkim`, params);\r\n }\r\n\r\n async getDkim(fqdn: string): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/dkim/${enc(fqdn)}`);\r\n }\r\n\r\n async updateDkim(fqdn: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/dkim/${enc(fqdn)}`, data);\r\n }\r\n\r\n // ================================================================\r\n // SPF設定\r\n // ================================================================\r\n\r\n async listSpf(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/spf`, params);\r\n }\r\n\r\n async addSpf(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/spf`, data);\r\n }\r\n\r\n async updateSpf(fqdn: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/spf/${enc(fqdn)}`, data);\r\n }\r\n\r\n async deleteSpf(fqdn: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/spf/${enc(fqdn)}`);\r\n }\r\n\r\n // ================================================================\r\n // DMARC設定(送信側)\r\n // ================================================================\r\n\r\n async listDmarc(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/dmarc`, params);\r\n }\r\n\r\n async updateDmarc(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/dmarc/${enc(domain)}`, data);\r\n }\r\n\r\n // ================================================================\r\n // FTP\r\n // ================================================================\r\n\r\n async listFtp(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/ftp`, params);\r\n }\r\n\r\n async addFtp(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/ftp`, data);\r\n }\r\n\r\n async updateFtp(ftpAccount: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/ftp/${enc(ftpAccount)}`, data);\r\n }\r\n\r\n async deleteFtp(ftpAccount: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/ftp/${enc(ftpAccount)}`);\r\n }\r\n\r\n // ================================================================\r\n // MySQL\r\n // ================================================================\r\n\r\n async listDb(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/db`);\r\n }\r\n\r\n async addDb(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/db`, data);\r\n }\r\n\r\n async updateDb(dbName: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/db/${enc(dbName)}`, data);\r\n }\r\n\r\n async deleteDb(dbName: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/db/${enc(dbName)}`);\r\n }\r\n\r\n async listDbUser(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/db/user`);\r\n }\r\n\r\n async addDbUser(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/db/user`, data);\r\n }\r\n\r\n async updateDbUser(dbUser: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/db/user/${enc(dbUser)}`, data);\r\n }\r\n\r\n async deleteDbUser(dbUser: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/db/user/${enc(dbUser)}`);\r\n }\r\n\r\n async listDbUserGrant(dbUser: string): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/db/user/${enc(dbUser)}/grant`);\r\n }\r\n\r\n async addDbUserGrant(dbUser: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/db/user/${enc(dbUser)}/grant`, data);\r\n }\r\n\r\n async deleteDbUserGrant(dbUser: string, data?: Record<string, unknown>): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/db/user/${enc(dbUser)}/grant`, data);\r\n }\r\n\r\n // ================================================================\r\n // PHP バージョン\r\n // ================================================================\r\n\r\n async getPhpVersion(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/php-version`, params);\r\n }\r\n\r\n async updatePhpVersion(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/php-version/${enc(domain)}`, data);\r\n }\r\n\r\n // ================================================================\r\n // ドメイン(サーバーパネル)\r\n // ================================================================\r\n\r\n async listDomain(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/domain`);\r\n }\r\n\r\n async getDomain(domain: string): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/domain/${enc(domain)}`);\r\n }\r\n\r\n async addDomain(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/domain`, data);\r\n }\r\n\r\n async updateDomain(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/domain/${enc(domain)}`, data);\r\n }\r\n\r\n async deleteDomain(domain: string, data?: Record<string, unknown>): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/domain/${enc(domain)}`, data);\r\n }\r\n\r\n async resetDomain(domain: string, data?: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/domain/${enc(domain)}/reset`, data);\r\n }\r\n\r\n // ================================================================\r\n // サブドメイン\r\n // ================================================================\r\n\r\n async listSubdomain(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/subdomain`, params);\r\n }\r\n\r\n async addSubdomain(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/subdomain`, data);\r\n }\r\n\r\n async updateSubdomain(subdomain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/subdomain/${enc(subdomain)}`, data);\r\n }\r\n\r\n async deleteSubdomain(subdomain: string, data?: Record<string, unknown>): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/subdomain/${enc(subdomain)}`, data);\r\n }\r\n\r\n // ================================================================\r\n // SSL\r\n // ================================================================\r\n\r\n async listSsl(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/ssl`, params);\r\n }\r\n\r\n async installSsl(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/ssl`, data);\r\n }\r\n\r\n async uninstallSsl(commonName: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/ssl/${enc(commonName)}`);\r\n }\r\n\r\n // ================================================================\r\n // DNS(サーバーパネル)\r\n // ================================================================\r\n\r\n async listDns(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/dns`, params);\r\n }\r\n\r\n async addDns(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/dns`, data);\r\n }\r\n\r\n async updateDns(dnsId: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/dns/${enc(dnsId)}`, data);\r\n }\r\n\r\n async deleteDns(dnsId: string, data?: Record<string, unknown>): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/dns/${enc(dnsId)}`, data);\r\n }\r\n\r\n // ================================================================\r\n // SSH\r\n // ================================================================\r\n\r\n async getSsh(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/ssh`);\r\n }\r\n\r\n async updateSsh(data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/ssh`, data);\r\n }\r\n\r\n async listSshKey(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/ssh/key`);\r\n }\r\n\r\n async addSshKey(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/ssh/key`, data);\r\n }\r\n\r\n async updateSshKey(keyId: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/ssh/key/${enc(keyId)}`, data);\r\n }\r\n\r\n async deleteSshKey(keyId: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/ssh/key/${enc(keyId)}`);\r\n }\r\n\r\n // ================================================================\r\n // リソースモニター\r\n // ================================================================\r\n\r\n async getResourceMonitor(date: string): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/resource-monitor`, { date });\r\n }\r\n\r\n // ================================================================\r\n // WAF設定\r\n // ================================================================\r\n\r\n async listWaf(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/waf`, params);\r\n }\r\n\r\n async updateWaf(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/waf/${enc(domain)}`, data);\r\n }\r\n\r\n // ================================================================\r\n // php.ini設定\r\n // ================================================================\r\n\r\n async listPhpIni(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/php-ini`, params);\r\n }\r\n\r\n async updatePhpIni(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/php-ini/${enc(domain)}`, data);\r\n }\r\n\r\n async resetPhpIni(domain: string): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/php-ini/${enc(domain)}/reset`);\r\n }\r\n\r\n // ================================================================\r\n // WordPressセキュリティ設定\r\n // ================================================================\r\n\r\n async getWordPressSecurity(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/wordpress-security`, params);\r\n }\r\n\r\n async updateWordPressSecurity(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/wordpress-security`, data);\r\n }\r\n\r\n // ================================================================\r\n // Xアクセラレータ設定\r\n // ================================================================\r\n\r\n async listXAccelerator(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/x-accelerator`, params);\r\n }\r\n\r\n async updateXAccelerator(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/x-accelerator/${enc(domain)}`, data);\r\n }\r\n\r\n // ================================================================\r\n // サーバーキャッシュ設定\r\n // ================================================================\r\n\r\n async listServerCache(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/server-cache`, params);\r\n }\r\n\r\n async updateServerCache(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/server-cache/${enc(domain)}`, data);\r\n }\r\n\r\n async clearServerCache(domain: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/server-cache/${enc(domain)}/cache`);\r\n }\r\n\r\n // ================================================================\r\n // ブラウザキャッシュ設定\r\n // ================================================================\r\n\r\n async listBrowserCache(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/browser-cache`, params);\r\n }\r\n\r\n async updateBrowserCache(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/browser-cache/${enc(domain)}`, data);\r\n }\r\n\r\n // ================================================================\r\n // サイト転送設定\r\n // ================================================================\r\n\r\n async listUrlRedirect(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/url-redirect`, params);\r\n }\r\n\r\n async addUrlRedirect(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/url-redirect`, data);\r\n }\r\n\r\n async deleteUrlRedirect(redirectId: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/url-redirect/${enc(redirectId)}`);\r\n }\r\n\r\n // ================================================================\r\n // アクセス拒否設定\r\n // ================================================================\r\n\r\n async listAccessDeny(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/access-deny`, params);\r\n }\r\n\r\n async addAccessDeny(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/access-deny`, data);\r\n }\r\n\r\n async updateAccessDeny(denyId: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/access-deny/${enc(denyId)}`, data);\r\n }\r\n\r\n async deleteAccessDeny(denyId: string): Promise<unknown> {\r\n return this.delete(`${this.serverPath()}/access-deny/${enc(denyId)}`);\r\n }\r\n\r\n // ================================================================\r\n // XPageSpeed設定\r\n // ================================================================\r\n\r\n async listXPageSpeed(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/xpagespeed`, params);\r\n }\r\n\r\n async updateXPageSpeed(domain: string, data: Record<string, unknown>): Promise<unknown> {\r\n return this.put(`${this.serverPath()}/xpagespeed/${enc(domain)}`, data);\r\n }\r\n\r\n // ================================================================\r\n // 自動バックアップの取得・復元\r\n // ================================================================\r\n\r\n async listAutoBackupBackupDates(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/auto-backup/backup-dates`);\r\n }\r\n\r\n async listAutoBackup(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/auto-backup`);\r\n }\r\n\r\n async getAutoBackup(requestId: string): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/auto-backup/${enc(requestId)}`);\r\n }\r\n\r\n async createAutoBackup(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/auto-backup`, data);\r\n }\r\n\r\n // ================================================================\r\n // MySQLバックアップの取得・復元\r\n // ================================================================\r\n\r\n async listMysqlBackupDatabases(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/mysql-backup/databases`);\r\n }\r\n\r\n async listMysqlBackup(): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/mysql-backup`);\r\n }\r\n\r\n async getMysqlBackup(requestId: string): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/mysql-backup/${enc(requestId)}`);\r\n }\r\n\r\n async createMysqlBackup(data: Record<string, unknown>): Promise<unknown> {\r\n return this.post(`${this.serverPath()}/mysql-backup`, data);\r\n }\r\n\r\n // ================================================================\r\n // ログ\r\n // ================================================================\r\n\r\n async getAccessLog(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/access-log`, params);\r\n }\r\n\r\n async getErrorLog(params?: Record<string, string>): Promise<unknown> {\r\n return this.get(`${this.serverPath()}/error-log`, params);\r\n }\r\n\r\n // ================================================================\r\n // APIキー情報\r\n // ================================================================\r\n\r\n async getMe(): Promise<unknown> {\r\n return this.get('/v1/me');\r\n }\r\n\r\n // ================================================================\r\n // HTTP 基盤\r\n // ================================================================\r\n\r\n async get(path: string, params?: Record<string, string>): Promise<unknown> {\r\n let url = `${this.apiBase}${path}`;\r\n if (params && Object.keys(params).length > 0) {\r\n url += '?' + new URLSearchParams(params).toString();\r\n }\r\n return this.request('GET', url);\r\n }\r\n\r\n async post(path: string, data?: Record<string, unknown>): Promise<unknown> {\r\n return this.request('POST', `${this.apiBase}${path}`, data);\r\n }\r\n\r\n async put(path: string, data?: Record<string, unknown>): Promise<unknown> {\r\n return this.request('PUT', `${this.apiBase}${path}`, data);\r\n }\r\n\r\n async delete(path: string, data?: Record<string, unknown>): Promise<unknown> {\r\n return this.request('DELETE', `${this.apiBase}${path}`, data);\r\n }\r\n\r\n private async request(method: string, url: string, body?: Record<string, unknown>): Promise<unknown> {\r\n const headers: Record<string, string> = {\r\n 'Authorization': `Bearer ${this.apiKey}`,\r\n 'Accept': 'application/json',\r\n };\r\n\r\n const init: RequestInit = {\r\n method,\r\n headers,\r\n signal: AbortSignal.timeout(DEFAULT_TIMEOUT_MS),\r\n };\r\n\r\n if (body && method !== 'GET') {\r\n headers['Content-Type'] = 'application/json';\r\n init.body = JSON.stringify(body);\r\n }\r\n\r\n if (this.debug) {\r\n const dbg = (msg: string) => process.stderr.write(`[DEBUG] ${msg}\\n`);\r\n dbg(`${method} ${url}`);\r\n if (init.body) dbg(`Body: ${init.body as string}`);\r\n }\r\n\r\n let response: Response;\r\n try {\r\n response = await fetch(url, init);\r\n } catch (err) {\r\n throw new Error(`通信エラー: ${err instanceof Error ? err.message : String(err)}`);\r\n }\r\n\r\n if (this.debug) {\r\n const dbg = (msg: string) => process.stderr.write(`[DEBUG] ${msg}\\n`);\r\n dbg(`HTTP ${response.status} ${response.statusText}`);\r\n const debugHeaders = ['x-ratelimit-limit', 'x-ratelimit-remaining', 'x-ratelimit-reset', 'x-concurrent-limit', 'x-concurrent-remaining', 'content-type'];\r\n for (const h of debugHeaders) {\r\n const v = response.headers.get(h);\r\n if (v !== null) dbg(` ${h}: ${v}`);\r\n }\r\n }\r\n\r\n const rateLimitHeader = response.headers.get('x-ratelimit-limit');\r\n if (rateLimitHeader) {\r\n this.lastRateLimit = {\r\n limit: parseInt(rateLimitHeader, 10),\r\n remaining: parseInt(response.headers.get('x-ratelimit-remaining') || '0', 10),\r\n reset: parseInt(response.headers.get('x-ratelimit-reset') || '0', 10),\r\n };\r\n }\r\n\r\n const text = await response.text();\r\n let data: unknown;\r\n try {\r\n data = JSON.parse(text);\r\n } catch {\r\n if (this.debug) {\r\n process.stderr.write(`[DEBUG] Raw response: ${text.substring(0, 500)}\\n`);\r\n }\r\n throw new ApiError(`Response parse error (HTTP ${response.status})`, response.status, 'PARSE_ERROR', []);\r\n }\r\n\r\n if (!response.ok) {\r\n const err = data as { error?: { code?: string; message?: string; errors?: string[] } };\r\n const errorCode = err?.error?.code || 'UNKNOWN_ERROR';\r\n const errorMessage = err?.error?.message || 'エラーが発生しました';\r\n const errors = err?.error?.errors || [];\r\n throw new ApiError(errorMessage, response.status, errorCode, errors);\r\n }\r\n\r\n return data;\r\n }\r\n}\r\n\r\nfunction enc(s: string): string {\r\n return encodeURIComponent(s);\r\n}\r\n","import { ApiError } from 'xnp-shared';\r\nimport type { BrandConfig } from 'xnp-shared';\r\n\r\nexport type ToolResult = { content: { type: 'text'; text: string }[]; isError?: boolean };\r\n\r\nexport function serverToolName(brand: BrandConfig, action: string, feature: string): string {\r\n return `${brand.brand}_${action}_server_${feature}`;\r\n}\r\n\r\nexport async function callApi(fn: () => Promise<unknown>): Promise<ToolResult> {\r\n try {\r\n const result = await fn();\r\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };\r\n } catch (e) {\r\n let msg: string;\r\n if (e instanceof ApiError) {\r\n msg = `Error [HTTP ${e.httpStatus}] ${e.errorCode}: ${e.message}`;\r\n if (e.errors.length > 0) {\r\n msg += '\\n' + e.errors.map(err => ` - ${err}`).join('\\n');\r\n }\r\n } else if (e instanceof Error) {\r\n msg = `Error: ${e.message}`;\r\n } else {\r\n msg = `Error: ${String(e)}`;\r\n }\r\n return { content: [{ type: 'text', text: msg }], isError: true };\r\n }\r\n}\r\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerServerInfoTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'get', 'info'), 'サーバーのOS・CPU・メモリ・利用可能なPHP/DBバージョン等を取得', {},\r\n async () => callApi(() => client.getServerInfo()));\r\n\r\n server.tool(serverToolName(brand, 'get', 'usage'), 'ディスク使用量・ファイル数・ドメイン数等のサーバー利用状況を取得', {},\r\n async () => callApi(() => client.getServerUsage()));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerCronTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'cron'), 'Cron設定の一覧を取得', {},\r\n async () => callApi(() => client.listCron()));\r\n\r\n server.tool(serverToolName(brand, 'add', 'cron'), 'Cronジョブを新規追加', {\r\n minute: z.string().describe('分(0-59, */5 等)'),\r\n hour: z.string().describe('時(0-23, * 等)'),\r\n day: z.string().default('*').describe('日(1-31, * 等)'),\r\n month: z.string().default('*').describe('月(1-12, * 等)'),\r\n weekday: z.string().default('*').describe('曜日(0-7, * 等)'),\r\n command: z.string().describe('実行コマンド'),\r\n comment: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addCron(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'cron'), 'Cronジョブを更新', {\r\n cron_id: z.string().describe('CronのID'),\r\n minute: z.string().describe('分'),\r\n hour: z.string().describe('時'),\r\n day: z.string().default('*').describe('日'),\r\n month: z.string().default('*').describe('月'),\r\n weekday: z.string().default('*').describe('曜日'),\r\n command: z.string().describe('実行コマンド'),\r\n comment: z.string().optional().describe('メモ'),\r\n enabled: z.boolean().optional().describe('有効/無効'),\r\n }, async ({ cron_id, ...data }) => callApi(() => client.updateCron(cron_id, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'cron'), 'Cronジョブを削除', {\r\n cron_id: z.string().describe('CronのID'),\r\n }, async ({ cron_id }) => callApi(() => client.deleteCron(cron_id)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerSshTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'get', 'ssh'), 'SSH設定(有効/無効、国外アクセス制限、接続情報)を取得', {},\r\n async () => callApi(() => client.getSsh()));\r\n\r\n server.tool(serverToolName(brand, 'update', 'ssh'), 'SSH設定を変更(有効/無効、国外アクセス制限)', {\r\n ssh_enabled: z.boolean().optional().describe('SSH接続の有効/無効'),\r\n abroad_access_restriction: z.boolean().optional().describe('国外アクセス制限の有効/無効'),\r\n }, async (args) => callApi(() => client.updateSsh(args)));\r\n\r\n server.tool(serverToolName(brand, 'list', 'ssh_key'), 'SSH公開鍵の一覧を取得', {},\r\n async () => callApi(() => client.listSshKey()));\r\n\r\n server.tool(serverToolName(brand, 'add', 'ssh_key'), 'SSH公開鍵を登録(手動登録またはサーバー側で鍵ペア自動生成)', {\r\n label: z.string().describe('ラベル'),\r\n public_key: z.string().optional().describe('公開鍵(手動登録時。OpenSSH形式)'),\r\n generate: z.boolean().optional().describe('trueでサーバー側で鍵ペアを自動生成(秘密鍵が返却される)'),\r\n passphrase: z.string().optional().describe('パスフレーズ(自動生成時。6〜32文字)'),\r\n }, async (args) => callApi(() => client.addSshKey(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'ssh_key'), 'SSH公開鍵のラベルやステータスを更新', {\r\n key_id: z.string().describe('公開鍵ID'),\r\n label: z.string().optional().describe('ラベル'),\r\n status: z.enum(['on', 'off']).optional().describe('ステータス'),\r\n }, async ({ key_id, ...data }) => callApi(() => client.updateSshKey(key_id, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'ssh_key'), 'SSH公開鍵を削除', {\r\n key_id: z.string().describe('公開鍵ID'),\r\n }, async ({ key_id }) => callApi(() => client.deleteSshKey(key_id)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerWordpressTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'wordpress'), 'WordPress一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listWordpress(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'wordpress'), 'WordPressを新規インストール', {\r\n url: z.string().describe('インストール先URL(例: https://example.com/blog)'),\r\n title: z.string().describe('サイトタイトル'),\r\n admin_username: z.string().describe('管理者ユーザー名'),\r\n admin_password: z.string().describe('管理者パスワード'),\r\n admin_email: z.string().describe('管理者メールアドレス'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addWordpress(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'wordpress'), 'WordPressのメモを更新', {\r\n wp_id: z.string().describe('WordPressのID'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ wp_id, ...data }) => callApi(() => client.updateWordpress(wp_id, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'wordpress'), 'WordPressをアンインストール', {\r\n wp_id: z.string().describe('WordPressのID'),\r\n delete_db: z.boolean().optional().describe('関連データベースも削除するか'),\r\n }, async ({ wp_id, ...data }) => callApi(() => client.deleteWordpress(wp_id, data)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerMailTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'mail'), 'メールアカウント一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listMail(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'get', 'mail'), 'メールアカウントの詳細(容量等)を取得', {\r\n mail_account: z.string().describe('メールアドレス'),\r\n }, async ({ mail_account }) => callApi(() => client.getMail(mail_account)));\r\n\r\n server.tool(serverToolName(brand, 'add', 'mail'), 'メールアカウントを作成', {\r\n mail_address: z.string().describe('メールアドレス(user@domain 形式)'),\r\n password: z.string().describe('パスワード'),\r\n quota_mb: z.number().optional().describe('容量制限(MB)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addMail(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'mail'), 'メールアカウントを更新', {\r\n mail_account: z.string().describe('メールアドレス'),\r\n password: z.string().optional().describe('パスワード'),\r\n quota_mb: z.number().optional().describe('容量制限(MB)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ mail_account, ...data }) => callApi(() => client.updateMail(mail_account, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'mail'), 'メールアカウントを削除', {\r\n mail_account: z.string().describe('メールアドレス'),\r\n }, async ({ mail_account }) => callApi(() => client.deleteMail(mail_account)));\r\n\r\n server.tool(serverToolName(brand, 'get', 'mail_forwarding'), 'メール転送設定を取得', {\r\n mail_account: z.string().describe('メールアドレス'),\r\n }, async ({ mail_account }) => callApi(() => client.getMailForwarding(mail_account)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'mail_forwarding'), 'メール転送設定を更新', {\r\n mail_account: z.string().describe('メールアドレス'),\r\n forwarding_addresses: z.array(z.string()).describe('転送先メールアドレスの配列'),\r\n keep_in_mailbox: z.boolean().optional().describe('メールボックスにも残すか'),\r\n }, async ({ mail_account, ...data }) => callApi(() => client.updateMailForwarding(mail_account, data)));\r\n\r\n server.tool(serverToolName(brand, 'list', 'mail_filter'), 'メール振り分け設定の一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listMailFilter(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'mail_filter'), 'メール振り分けルールを追加', {\r\n domain: z.string().describe('対象ドメイン'),\r\n conditions: z.array(z.object({\r\n keyword: z.string(),\r\n field: z.string(),\r\n match_type: z.string(),\r\n })).describe('条件'),\r\n action: z.object({\r\n type: z.string(),\r\n target: z.string(),\r\n method: z.string(),\r\n }).describe('アクション'),\r\n }, async (args) => callApi(() => client.addMailFilter(args)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'mail_filter'), 'メール振り分けルールを削除', {\r\n filter_id: z.string().describe('フィルターID'),\r\n }, async ({ filter_id }) => callApi(() => client.deleteMailFilter(filter_id)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst PARTIAL_UPDATE_EMPTY_MESSAGE = '更新するフィールドを1つ以上指定してください';\r\n\r\nexport function registerAutoReplyTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'auto_reply'), '自動応答設定の一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listAutoReply(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'get', 'auto_reply'), '自動応答設定の詳細を取得', {\r\n mail_address: z.string().describe('メールアドレス'),\r\n }, async ({ mail_address }) => callApi(() => client.getAutoReply(mail_address)));\r\n\r\n server.tool(serverToolName(brand, 'add', 'auto_reply'), '自動応答設定を追加', {\r\n domain: z.string().describe('対象ドメイン'),\r\n mail_address: z.string().describe('メールアドレス'),\r\n from_name: z.string().describe('送信者名'),\r\n subject: z.string().describe('件名'),\r\n body: z.string().describe('本文'),\r\n quote_incoming: z.boolean().describe('受信メールの引用を含めるか'),\r\n }, async (args) => callApi(() => client.addAutoReply(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'auto_reply'), '自動応答設定を更新(指定した項目のみ)', {\r\n mail_address: z.string().describe('メールアドレス'),\r\n from_name: z.string().optional().describe('送信者名'),\r\n subject: z.string().optional().describe('件名'),\r\n body: z.string().optional().describe('本文'),\r\n quote_incoming: z.boolean().optional().describe('受信メールの引用を含めるか'),\r\n }, async ({ mail_address, from_name, subject, body, quote_incoming }) => {\r\n const data: Record<string, unknown> = {};\r\n if (from_name !== undefined) data.from_name = from_name;\r\n if (subject !== undefined) data.subject = subject;\r\n if (body !== undefined) data.body = body;\r\n if (quote_incoming !== undefined) data.quote_incoming = quote_incoming;\r\n if (Object.keys(data).length === 0) {\r\n throw new Error(PARTIAL_UPDATE_EMPTY_MESSAGE);\r\n }\r\n return callApi(() => client.updateAutoReply(mail_address, data));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'delete', 'auto_reply'), '自動応答設定を削除', {\r\n mail_address: z.string().describe('メールアドレス'),\r\n }, async ({ mail_address }) => callApi(() => client.deleteAutoReply(mail_address)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerSmtpAbroadRestrictionTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(\r\n serverToolName(brand, 'list', 'smtp_abroad_restriction'),\r\n 'SMTP認証の国外アクセス制限設定を取得',\r\n {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n },\r\n async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listSmtpAbroadRestriction(params));\r\n },\r\n );\r\n\r\n server.tool(\r\n serverToolName(brand, 'update', 'smtp_abroad_restriction'),\r\n 'SMTP認証の国外アクセス制限設定を更新',\r\n {\r\n domain: z.string().describe('対象ドメイン'),\r\n abroad_access_restriction: z.boolean().describe('国外アクセス制限の有効/無効'),\r\n },\r\n async ({ domain, abroad_access_restriction }) =>\r\n callApi(() => client.updateSmtpAbroadRestriction(domain, { abroad_access_restriction })),\r\n );\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerDkimTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'dkim'), 'DKIM設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listDkim(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'get', 'dkim'), 'DKIM設定の詳細を取得', {\r\n fqdn: z.string().describe('FQDN(example.com または sub.example.com)'),\r\n }, async ({ fqdn }) => callApi(() => client.getDkim(fqdn)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'dkim'), 'DKIM設定の有効/無効を切り替え', {\r\n fqdn: z.string().describe('FQDN(example.com または sub.example.com)'),\r\n enabled: z.boolean().describe('DKIMの有効/無効'),\r\n }, async ({ fqdn, enabled }) => callApi(() => client.updateDkim(fqdn, { enabled })));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst PARTIAL_UPDATE_EMPTY_MESSAGE = '更新するフィールドを1つ以上指定してください';\r\n\r\nexport function registerDmarcTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'dmarc'), '送信側DMARC設定を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listDmarc(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'dmarc'), '送信側DMARC設定を更新(指定した項目のみ)', {\r\n domain: z.string().describe('対象ドメイン'),\r\n policy: z.enum(['none', 'quarantine', 'reject']).optional().describe('DMARCポリシー'),\r\n report_enabled: z.boolean().optional().describe('レポート通知の有効/無効。false のとき通知先メールアドレスは自動的に空になる'),\r\n notification_mail_addresses: z.array(z.string()).optional().describe('レポート通知先メールアドレス。report_enabled が true のときは1件以上必須'),\r\n }, async ({ domain, policy, report_enabled, notification_mail_addresses }) => {\r\n const data: Record<string, unknown> = {};\r\n if (policy !== undefined) data.policy = policy;\r\n if (report_enabled !== undefined) data.report_enabled = report_enabled;\r\n if (notification_mail_addresses !== undefined) {\r\n data.notification_mail_addresses = notification_mail_addresses;\r\n }\r\n if (Object.keys(data).length === 0) {\r\n throw new Error(PARTIAL_UPDATE_EMPTY_MESSAGE);\r\n }\r\n return callApi(() => client.updateDmarc(domain, data));\r\n });\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst updateActionSchema = z.enum(['reset', 'enable_gmail', 'custom']);\r\n\r\nexport function registerSpfTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'spf'), 'SPF設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listSpf(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'spf'), 'SPF設定を追加', {\r\n fqdn: z.string().describe('FQDN(example.com または sub.example.com)'),\r\n }, async ({ fqdn }) => callApi(() => client.addSpf({ fqdn })));\r\n\r\n server.tool(serverToolName(brand, 'update', 'spf'), 'SPF設定を更新', {\r\n fqdn: z.string().describe('FQDN'),\r\n action: updateActionSchema.describe('reset: 標準SPFへ初期化 / enable_gmail: Gmail許可ON / custom: カスタム設定'),\r\n spf_record: z.string().optional().describe('カスタムSPFレコード(action=custom のとき必須)'),\r\n }, async ({ fqdn, action, spf_record }) => {\r\n const body: Record<string, unknown> = { action };\r\n if (action === 'custom') {\r\n if (spf_record === undefined || spf_record === '') {\r\n throw new Error('action=custom のときは spf_record が必須です');\r\n }\r\n body.spf_record = spf_record;\r\n }\r\n return callApi(() => client.updateSpf(fqdn, body));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'delete', 'spf'), 'SPF設定を削除', {\r\n fqdn: z.string().describe('FQDN'),\r\n }, async ({ fqdn }) => callApi(() => client.deleteSpf(fqdn)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst filterTypeSchema = z.enum(['off', 'standard', 'cloudmark_authority']);\r\nconst detectionActionSchema = z.enum(['inbox', 'spam', 'trash', 'delete']);\r\nconst spamLevelSchema = z.enum(['very_lenient', 'lenient', 'normal', 'strict', 'very_strict', 'strictest']);\r\n\r\nconst PARTIAL_UPDATE_EMPTY_MESSAGE = '更新するフィールドを1つ以上指定してください';\r\n\r\nexport function registerSpamFilterTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'spam_filter'), '迷惑メールフィルタ設定を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listSpamFilter(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'spam_filter'), '迷惑メールフィルタ設定を更新(指定した項目のみ)', {\r\n domain: z.string().describe('対象ドメイン'),\r\n filter_type: filterTypeSchema.optional().describe('迷惑メールフィルタ'),\r\n detection_action: detectionActionSchema.optional().describe('検知時の処理(inbox / spam / trash / delete)'),\r\n white_list: z.array(z.string()).optional().describe('ホワイトリスト(空配列でクリア)'),\r\n black_list: z.array(z.string()).optional().describe('ブラックリスト(空配列でクリア)'),\r\n spam_level: spamLevelSchema.optional().describe('標準スパムフィルタ判定基準'),\r\n strict_non_japanese_subject: z.boolean().optional().describe('日本語を含まない件名に対して判定を厳しくする'),\r\n strict_html_mail: z.boolean().optional().describe('HTMLメールに対して判定を厳しくする'),\r\n }, async (args) => {\r\n const { domain, ...fields } = args;\r\n const data: Record<string, unknown> = {};\r\n if (fields.filter_type !== undefined) data.filter_type = fields.filter_type;\r\n if (fields.detection_action !== undefined) data.detection_action = fields.detection_action;\r\n if (fields.white_list !== undefined) data.white_list = fields.white_list;\r\n if (fields.black_list !== undefined) data.black_list = fields.black_list;\r\n if (fields.spam_level !== undefined) data.spam_level = fields.spam_level;\r\n if (fields.strict_non_japanese_subject !== undefined) {\r\n data.strict_non_japanese_subject = fields.strict_non_japanese_subject;\r\n }\r\n if (fields.strict_html_mail !== undefined) data.strict_html_mail = fields.strict_html_mail;\r\n if (Object.keys(data).length === 0) {\r\n throw new Error(PARTIAL_UPDATE_EMPTY_MESSAGE);\r\n }\r\n return callApi(() => client.updateSpamFilter(domain, data));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'spam_filter_dmarc_receiver'), '受信側DMARC設定を更新', {\r\n domain: z.string().describe('対象ドメイン'),\r\n dmarc_receiver: z.boolean().describe('受信側DMARC設定'),\r\n }, async ({ domain, dmarc_receiver }) => callApi(() => client.updateSpamFilterDmarcReceiver(domain, { dmarc_receiver })));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerFtpTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'ftp'), 'FTPアカウント一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listFtp(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'ftp'), 'FTPアカウントを追加', {\r\n ftp_account: z.string().describe('FTPアカウント(user@domain 形式)'),\r\n password: z.string().describe('パスワード'),\r\n directory: z.string().optional().describe('ディレクトリ'),\r\n quota_mb: z.number().optional().describe('容量制限(MB。0で無制限)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addFtp(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'ftp'), 'FTPアカウントを更新', {\r\n ftp_account: z.string().describe('FTPアカウント'),\r\n password: z.string().optional().describe('パスワード'),\r\n directory: z.string().optional().describe('ディレクトリ'),\r\n quota_mb: z.number().optional().describe('容量制限(MB)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ ftp_account, ...data }) => callApi(() => client.updateFtp(ftp_account, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'ftp'), 'FTPアカウントを削除', {\r\n ftp_account: z.string().describe('FTPアカウント'),\r\n }, async ({ ftp_account }) => callApi(() => client.deleteFtp(ftp_account)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerDatabaseTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'db'), 'MySQL データベース一覧を取得', {},\r\n async () => callApi(() => client.listDb()));\r\n\r\n server.tool(serverToolName(brand, 'add', 'db'), 'MySQL データベースを作成', {\r\n name_suffix: z.string().describe('DB名のサフィックス(プレフィックスは自動付与)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addDb(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'db'), 'MySQL データベースのメモを更新', {\r\n db_name: z.string().describe('データベース名'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ db_name, ...data }) => callApi(() => client.updateDb(db_name, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'db'), 'MySQL データベースを削除', {\r\n db_name: z.string().describe('データベース名'),\r\n }, async ({ db_name }) => callApi(() => client.deleteDb(db_name)));\r\n\r\n server.tool(serverToolName(brand, 'list', 'db_user'), 'MySQL ユーザー一覧を取得', {},\r\n async () => callApi(() => client.listDbUser()));\r\n\r\n server.tool(serverToolName(brand, 'add', 'db_user'), 'MySQL ユーザーを作成', {\r\n name_suffix: z.string().describe('ユーザー名のサフィックス'),\r\n password: z.string().describe('パスワード'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addDbUser(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'db_user'), 'MySQL ユーザーのパスワード等を変更', {\r\n db_user: z.string().describe('ユーザー名'),\r\n password: z.string().optional().describe('パスワード'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ db_user, ...data }) => callApi(() => client.updateDbUser(db_user, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'db_user'), 'MySQL ユーザーを削除', {\r\n db_user: z.string().describe('ユーザー名'),\r\n }, async ({ db_user }) => callApi(() => client.deleteDbUser(db_user)));\r\n\r\n server.tool(serverToolName(brand, 'list', 'db_user_grant'), 'MySQL ユーザーのデータベース権限を取得', {\r\n db_user: z.string().describe('ユーザー名'),\r\n }, async ({ db_user }) => callApi(() => client.listDbUserGrant(db_user)));\r\n\r\n server.tool(serverToolName(brand, 'add', 'db_user_grant'), 'MySQL ユーザーにデータベース権限を付与', {\r\n db_user: z.string().describe('ユーザー名'),\r\n db_name: z.string().describe('データベース名'),\r\n }, async ({ db_user, ...data }) => callApi(() => client.addDbUserGrant(db_user, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'db_user_grant'), 'MySQL ユーザーからデータベース権限を削除', {\r\n db_user: z.string().describe('ユーザー名'),\r\n db_name: z.string().describe('データベース名'),\r\n }, async ({ db_user, ...data }) => callApi(() => client.deleteDbUserGrant(db_user, data)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerDomainTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'domain'), 'ドメイン一覧を取得', {},\r\n async () => callApi(() => client.listDomain()));\r\n\r\n server.tool(serverToolName(brand, 'get', 'domain'), 'ドメインの詳細情報を取得', {\r\n domain: z.string().describe('ドメイン名'),\r\n }, async ({ domain }) => callApi(() => client.getDomain(domain)));\r\n\r\n server.tool(serverToolName(brand, 'add', 'domain'), 'ドメインを追加', {\r\n domain: z.string().describe('ドメイン名'),\r\n ssl: z.boolean().optional().describe('無料SSL設定(デフォルト: true)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addDomain(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'domain'), 'ドメインのメモを更新', {\r\n domain: z.string().describe('ドメイン名'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ domain, ...data }) => callApi(() => client.updateDomain(domain, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'domain'), 'ドメインを削除', {\r\n domain: z.string().describe('ドメイン名'),\r\n }, async ({ domain }) => callApi(() => client.deleteDomain(domain)));\r\n\r\n server.tool(serverToolName(brand, 'list', 'subdomain'), 'サブドメイン一覧を取得', {\r\n domain: z.string().optional().describe('親ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listSubdomain(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'subdomain'), 'サブドメインを追加', {\r\n subdomain: z.string().describe('サブドメイン(例: blog.example.com)'),\r\n document_root_type: z.enum(['subdomain_only', 'full_subdomain']).optional().describe('ドキュメントルート種別(subdomain_only: /public_html/sub, full_subdomain: /public_html/sub.example.com)'),\r\n ssl: z.boolean().optional().describe('無料SSL設定(デフォルト: true)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addSubdomain(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'subdomain'), 'サブドメインのメモを更新', {\r\n subdomain: z.string().describe('サブドメイン'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ subdomain, ...data }) => callApi(() => client.updateSubdomain(subdomain, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'subdomain'), 'サブドメインを削除', {\r\n subdomain: z.string().describe('サブドメイン'),\r\n delete_files: z.boolean().optional().describe('関連ファイルも削除するか'),\r\n }, async ({ subdomain, ...data }) => callApi(() => client.deleteSubdomain(subdomain, data)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerSslDnsTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n // SSL\r\n server.tool(serverToolName(brand, 'list', 'ssl'), 'SSL設定の一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listSsl(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'install', 'ssl'), '無料SSL(Let\\'s Encrypt)をインストール', {\r\n common_name: z.string().describe('コモンネーム(ドメイン名)'),\r\n }, async (args) => callApi(() => client.installSsl(args)));\r\n\r\n server.tool(serverToolName(brand, 'uninstall', 'ssl'), '無料SSLをアンインストール', {\r\n common_name: z.string().describe('コモンネーム(ドメイン名)'),\r\n }, async ({ common_name }) => callApi(() => client.uninstallSsl(common_name)));\r\n\r\n // DNS\r\n server.tool(serverToolName(brand, 'list', 'dns'), 'DNSレコード一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listDns(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'dns'), 'DNSレコードを追加', {\r\n domain: z.string().describe('対象ドメイン'),\r\n host: z.string().describe('ホスト名(@でapex)'),\r\n type: z.string().describe('レコードタイプ(A / AAAA / CNAME / MX / TXT / SRV / CAA)'),\r\n content: z.string().describe('レコード値'),\r\n ttl: z.number().optional().describe('TTL(60-86400。デフォルト: 3600)'),\r\n priority: z.number().optional().describe('優先度(MX/SRVレコード用)'),\r\n }, async (args) => callApi(() => client.addDns(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'dns'), 'DNSレコードを更新', {\r\n dns_id: z.string().describe('DNSレコードID'),\r\n domain: z.string().describe('対象ドメイン'),\r\n host: z.string().describe('ホスト名'),\r\n type: z.string().describe('レコードタイプ'),\r\n content: z.string().describe('レコード値'),\r\n ttl: z.number().optional().describe('TTL'),\r\n priority: z.number().optional().describe('優先度'),\r\n }, async ({ dns_id, ...data }) => callApi(() => client.updateDns(dns_id, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'dns'), 'DNSレコードを削除', {\r\n dns_id: z.string().describe('DNSレコードID'),\r\n domain: z.string().describe('対象ドメイン'),\r\n }, async ({ dns_id, ...data }) => callApi(() => client.deleteDns(dns_id, data)));\r\n\r\n // PHP Version\r\n server.tool(serverToolName(brand, 'get', 'php_version'), 'PHPバージョン設定(利用可能バージョン・ドメイン別の現在バージョン)を取得', {},\r\n async () => callApi(() => client.getPhpVersion()));\r\n\r\n server.tool(serverToolName(brand, 'update', 'php_version'), 'ドメインのPHPバージョンを変更', {\r\n domain: z.string().describe('ドメイン名'),\r\n version: z.string().describe('PHPバージョン(例: 8.3.21)'),\r\n }, async ({ domain, ...data }) => callApi(() => client.updatePhpVersion(domain, data)));\r\n\r\n // Log\r\n server.tool(serverToolName(brand, 'get', 'access_log'), 'アクセスログを取得', {\r\n domain: z.string().describe('対象ドメイン'),\r\n lines: z.number().optional().describe('取得行数(末尾から)'),\r\n keyword: z.string().optional().describe('絞り込みキーワード'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n if (args.lines) params.lines = String(args.lines);\r\n if (args.keyword) params.keyword = args.keyword;\r\n return callApi(() => client.getAccessLog(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'get', 'error_log'), 'エラーログを取得', {\r\n domain: z.string().describe('対象ドメイン'),\r\n lines: z.number().optional().describe('取得行数(末尾から)'),\r\n keyword: z.string().optional().describe('絞り込みキーワード'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n if (args.lines) params.lines = String(args.lines);\r\n if (args.keyword) params.keyword = args.keyword;\r\n return callApi(() => client.getErrorLog(params));\r\n });\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerResourceMonitorTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'get', 'resource_monitor'), '指定日のCPU・メモリ・転送量時系列を取得', {\r\n date: z.string().describe('対象日(Y-m-d または Ymd。当日含む直近1か月)'),\r\n }, async ({ date }) => callApi(() => client.getResourceMonitor(date)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst PARTIAL_UPDATE_EMPTY_MESSAGE = '更新するフィールドを1つ以上指定してください';\r\n\r\nexport function registerWafTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'waf'), 'WAF設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listWaf(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'waf'), 'WAF設定を更新(指定した項目のみ)', {\r\n domain: z.string().describe('対象ドメイン'),\r\n xss_protection: z.boolean().optional().describe('XSS対策'),\r\n sql_injection_protection: z.boolean().optional().describe('SQL対策'),\r\n file_protection: z.boolean().optional().describe('ファイル対策'),\r\n mail_protection: z.boolean().optional().describe('メール対策'),\r\n command_protection: z.boolean().optional().describe('コマンド対策'),\r\n php_protection: z.boolean().optional().describe('PHP対策'),\r\n }, async (args) => {\r\n const { domain, ...fields } = args;\r\n const data: Record<string, unknown> = {};\r\n if (fields.xss_protection !== undefined) data.xss_protection = fields.xss_protection;\r\n if (fields.sql_injection_protection !== undefined) data.sql_injection_protection = fields.sql_injection_protection;\r\n if (fields.file_protection !== undefined) data.file_protection = fields.file_protection;\r\n if (fields.mail_protection !== undefined) data.mail_protection = fields.mail_protection;\r\n if (fields.command_protection !== undefined) data.command_protection = fields.command_protection;\r\n if (fields.php_protection !== undefined) data.php_protection = fields.php_protection;\r\n if (Object.keys(data).length === 0) {\r\n throw new Error(PARTIAL_UPDATE_EMPTY_MESSAGE);\r\n }\r\n return callApi(() => client.updateWaf(domain, data));\r\n });\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst PARTIAL_UPDATE_EMPTY_MESSAGE = '更新するフィールドを1つ以上指定してください';\r\n\r\nconst phpIniUpdateSchema = {\r\n domain: z.string().describe('対象ドメイン'),\r\n display_errors: z.string().optional().describe('エラー内容を画面に出力(On / Off)'),\r\n error_reporting: z.string().optional().describe('エラー出力レベル'),\r\n display_startup_errors: z.string().optional().describe('起動時エラーを表示(On / Off)'),\r\n 'session.auto_start': z.string().optional().describe('セッション自動開始(0 / 1)'),\r\n 'session.name': z.string().optional().describe('セッション名'),\r\n 'session.use_cookies': z.string().optional().describe('セッションIDにクッキーを使用(0 / 1)'),\r\n 'session.use_only_cookies': z.string().optional().describe('クッキーのみでセッションIDを保存(0 / 1)'),\r\n 'session.use_trans_sid': z.string().optional().describe('URLへセッションIDを自動設定(0 / 1)'),\r\n 'session.cookie_lifetime': z.string().optional().describe('クッキー有効期間(秒)'),\r\n 'session.cookie_path': z.string().optional().describe('クッキーを有効とするパス'),\r\n 'session.cookie_domain': z.string().optional().describe('クッキーを有効とするドメイン'),\r\n 'mbstring.language': z.string().optional().describe('デフォルト言語'),\r\n 'mbstring.internal_encoding': z.string().optional().describe('内部文字エンコーディング'),\r\n 'mbstring.http_input': z.string().optional().describe('HTTP入力文字エンコーディング変換'),\r\n 'mbstring.http_output': z.string().optional().describe('HTTP出力文字エンコーディング変換'),\r\n 'mbstring.encoding_translation': z.string().optional().describe('内部エンコーディングへの変換(On / Off)'),\r\n 'mbstring.detect_order': z.string().optional().describe('文字コード検出'),\r\n 'mbstring.substitute_character': z.string().optional().describe('無効文字の代替文字'),\r\n max_execution_time: z.string().optional().describe('最大実行時間(秒)'),\r\n max_input_time: z.string().optional().describe('入力パース最大時間(秒)'),\r\n memory_limit: z.string().optional().describe('最大メモリ'),\r\n post_max_size: z.string().optional().describe('POSTデータ最大サイズ'),\r\n upload_max_filesize: z.string().optional().describe('アップロードファイル最大サイズ'),\r\n register_globals: z.string().optional().describe('register_globals(On / Off)'),\r\n magic_quotes_gpc: z.string().optional().describe('magic_quotes_gpc(On / Off)'),\r\n safe_mode: z.string().optional().describe('safe_mode(On / Off)'),\r\n file_uploads: z.string().optional().describe('HTTPファイルアップロード(On / Off)'),\r\n allow_url_fopen: z.string().optional().describe('allow_url_fopen(On / Off)'),\r\n allow_url_include: z.string().optional().describe('allow_url_include(On / Off)'),\r\n};\r\n\r\nconst PHP_INI_API_KEYS = [\r\n 'display_errors',\r\n 'error_reporting',\r\n 'display_startup_errors',\r\n 'session.auto_start',\r\n 'session.name',\r\n 'session.use_cookies',\r\n 'session.use_only_cookies',\r\n 'session.use_trans_sid',\r\n 'session.cookie_lifetime',\r\n 'session.cookie_path',\r\n 'session.cookie_domain',\r\n 'mbstring.language',\r\n 'mbstring.internal_encoding',\r\n 'mbstring.http_input',\r\n 'mbstring.http_output',\r\n 'mbstring.encoding_translation',\r\n 'mbstring.detect_order',\r\n 'mbstring.substitute_character',\r\n 'max_execution_time',\r\n 'max_input_time',\r\n 'memory_limit',\r\n 'post_max_size',\r\n 'upload_max_filesize',\r\n 'register_globals',\r\n 'magic_quotes_gpc',\r\n 'safe_mode',\r\n 'file_uploads',\r\n 'allow_url_fopen',\r\n 'allow_url_include',\r\n] as const;\r\n\r\nexport function registerPhpIniTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'php_ini'), 'php.ini設定を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listPhpIni(params));\r\n });\r\n\r\n server.tool(\r\n serverToolName(brand, 'update', 'php_ini'),\r\n 'php.ini設定を更新(指定した項目のみ)',\r\n phpIniUpdateSchema,\r\n async (args) => {\r\n const { domain, ...fields } = args;\r\n const data: Record<string, unknown> = {};\r\n for (const key of PHP_INI_API_KEYS) {\r\n const value = fields[key as keyof typeof fields];\r\n if (value !== undefined) data[key] = value;\r\n }\r\n if (Object.keys(data).length === 0) {\r\n throw new Error(PARTIAL_UPDATE_EMPTY_MESSAGE);\r\n }\r\n return callApi(() => client.updatePhpIni(domain, data));\r\n },\r\n );\r\n\r\n server.tool(serverToolName(brand, 'reset', 'php_ini'), 'php.ini設定を初期値に戻す', {\r\n domain: z.string().describe('対象ドメイン'),\r\n }, async ({ domain }) => callApi(() => client.resetPhpIni(domain)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst enabledTargetSchema = z.object({\r\n enabled: z.boolean(),\r\n});\r\n\r\nconst foreignIpTargetSchema = z.object({\r\n enabled: z.boolean().optional(),\r\n allowed_ip_addresses: z.array(z.string()).optional(),\r\n});\r\n\r\nconst UPDATE_BLOCKS = [\r\n 'comment_restriction',\r\n 'login_attempt_limit',\r\n 'foreign_ip_restriction',\r\n 'ip_restriction',\r\n] as const;\r\n\r\nconst wordpressSecurityUpdateSchema = {\r\n domain: z.string().describe('対象ドメイン'),\r\n comment_restriction: z.object({\r\n bulk_post: enabledTargetSchema.optional(),\r\n foreign_post: enabledTargetSchema.optional(),\r\n }).optional().describe('コメント制限'),\r\n login_attempt_limit: z.object({\r\n enabled: z.boolean(),\r\n }).optional().describe('ログイン試行回数制限'),\r\n foreign_ip_restriction: z.object({\r\n dashboard: foreignIpTargetSchema.optional(),\r\n xml_rpc_api: foreignIpTargetSchema.optional(),\r\n rest_api: foreignIpTargetSchema.optional(),\r\n wlwmanifest: foreignIpTargetSchema.optional(),\r\n }).optional().describe('国外アクセス制限'),\r\n ip_restriction: z.object({\r\n enabled: z.boolean().optional(),\r\n allowed_ip_addresses: z.array(z.string()).optional(),\r\n }).optional().describe('IPアドレス制限(ダッシュボード)'),\r\n};\r\n\r\nfunction buildUpdateBody(args: Record<string, unknown>): Record<string, unknown> {\r\n const domain = args.domain;\r\n if (typeof domain !== 'string' || domain === '') {\r\n throw new Error('domain は必須です');\r\n }\r\n const data: Record<string, unknown> = { domain };\r\n for (const key of UPDATE_BLOCKS) {\r\n if (args[key] !== undefined) data[key] = args[key];\r\n }\r\n if (!UPDATE_BLOCKS.some((key) => key in data)) {\r\n throw new Error(\r\n 'comment_restriction、login_attempt_limit、foreign_ip_restriction、ip_restriction のいずれか1つ以上を指定してください',\r\n );\r\n }\r\n return data;\r\n}\r\n\r\nexport function registerWordPressSecurityTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'get', 'wordpress_security'), 'WordPressセキュリティ設定を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.getWordPressSecurity(params));\r\n });\r\n\r\n server.tool(\r\n serverToolName(brand, 'update', 'wordpress_security'),\r\n 'WordPressセキュリティ設定を更新(指定したブロックのみ)',\r\n wordpressSecurityUpdateSchema,\r\n async (args) => callApi(() => client.updateWordPressSecurity(buildUpdateBody(args))),\r\n );\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerXAcceleratorTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'x_accelerator'), 'Xアクセラレータ設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listXAccelerator(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'x_accelerator'), 'Xアクセラレータ設定を変更', {\r\n domain: z.string().describe('対象ドメイン'),\r\n xaccelerator_status: z.enum(['off', 'v1', 'v2']).describe('Xアクセラレータ設定(off / v1 / v2)'),\r\n }, async ({ domain, xaccelerator_status }) =>\r\n callApi(() => client.updateXAccelerator(domain, { xaccelerator_status })),\r\n );\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerServerCacheTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'server_cache'), 'サーバーキャッシュ設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listServerCache(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'server_cache'), 'サーバーキャッシュ設定を変更', {\r\n domain: z.string().describe('対象ドメイン'),\r\n server_cache_status: z.enum(['on', 'off']).describe('サーバーキャッシュ設定(on / off)'),\r\n }, async ({ domain, server_cache_status }) =>\r\n callApi(() => client.updateServerCache(domain, { server_cache_status })),\r\n );\r\n\r\n server.tool(serverToolName(brand, 'clear_cache', 'server_cache'), 'サーバーキャッシュの内容を削除(パージ)', {\r\n domain: z.string().describe('対象ドメイン'),\r\n }, async ({ domain }) => callApi(() => client.clearServerCache(domain)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerBrowserCacheTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'browser_cache'), 'ブラウザキャッシュ設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listBrowserCache(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'browser_cache'), 'ブラウザキャッシュ設定を変更', {\r\n domain: z.string().describe('対象ドメイン'),\r\n browser_cache_status: z.enum(['all', 'ignore-css-js', 'off']).describe('ブラウザキャッシュ設定(all / ignore-css-js / off)'),\r\n }, async ({ domain, browser_cache_status }) =>\r\n callApi(() => client.updateBrowserCache(domain, { browser_cache_status })),\r\n );\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerUrlRedirectTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'url_redirect'), 'サイト転送設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listUrlRedirect(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'url_redirect'), 'サイト転送設定を追加', {\r\n domain: z.string().describe('契約ドメイン'),\r\n from_host: z.string().describe('転送元ホスト(FQDN)'),\r\n from_path: z.string().optional().describe('転送元パス(省略時は /)'),\r\n redirect_to_url: z.string().describe('転送先URL(http または https)'),\r\n status_code: z.union([z.literal(301), z.literal(302)]).describe('転送時のステータスコード(301 / 302)'),\r\n }, async (args) => {\r\n const data: Record<string, unknown> = {\r\n domain: args.domain,\r\n from_host: args.from_host,\r\n redirect_to_url: args.redirect_to_url,\r\n status_code: args.status_code,\r\n };\r\n if (args.from_path !== undefined) data.from_path = args.from_path;\r\n return callApi(() => client.addUrlRedirect(data));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'delete', 'url_redirect'), 'サイト転送設定を削除', {\r\n redirect_id: z.string().describe('サイト転送設定のID'),\r\n }, async ({ redirect_id }) => callApi(() => client.deleteUrlRedirect(redirect_id)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerAccessDenyTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'access_deny'), 'アクセス拒否設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listAccessDeny(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'access_deny'), 'アクセス拒否設定を追加', {\r\n domain: z.string().describe('契約ドメイン'),\r\n ip_address: z.string().describe('拒否IPアドレス・ホスト(IPv4 / CIDR / 部分IP / ホスト名)'),\r\n memo: z.string().optional().describe('メモ(最大500文字)'),\r\n }, async (args) => {\r\n const data: Record<string, unknown> = {\r\n domain: args.domain,\r\n ip_address: args.ip_address,\r\n };\r\n if (args.memo !== undefined) data.memo = args.memo;\r\n return callApi(() => client.addAccessDeny(data));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'access_deny'), 'アクセス拒否設定のメモを更新', {\r\n deny_id: z.string().describe('アクセス拒否設定のID'),\r\n memo: z.string().describe('メモ(空文字でクリア)'),\r\n }, async ({ deny_id, memo }) => callApi(() => client.updateAccessDeny(deny_id, { memo })));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'access_deny'), 'アクセス拒否設定を削除', {\r\n deny_id: z.string().describe('アクセス拒否設定のID'),\r\n }, async ({ deny_id }) => callApi(() => client.deleteAccessDeny(deny_id)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst XPAGESPEED_KEYS = [\r\n 'xoptimize_images',\r\n 'lazyload_images',\r\n 'xoptimize_css',\r\n 'lazyload_css',\r\n 'xoptimize_javascript',\r\n 'lazyload_javascript',\r\n] as const;\r\n\r\nconst xPageSpeedUpdateSchema = {\r\n domain: z.string().describe('対象ドメイン'),\r\n xoptimize_images: z.boolean().optional().describe('画像最適化の有効/無効'),\r\n lazyload_images: z.boolean().optional().describe('画像遅延読み込みの有効/無効'),\r\n xoptimize_css: z.boolean().optional().describe('CSS最適化の有効/無効'),\r\n lazyload_css: z.boolean().optional().describe('CSS遅延読み込みの有効/無効'),\r\n xoptimize_javascript: z.boolean().optional().describe('JavaScript最適化の有効/無効'),\r\n lazyload_javascript: z.boolean().optional().describe('JavaScript遅延読み込みの有効/無効'),\r\n};\r\n\r\nfunction buildUpdateBody(args: Record<string, unknown>): Record<string, unknown> {\r\n const { domain, ...fields } = args;\r\n if (typeof domain !== 'string' || domain === '') {\r\n throw new Error('domain は必須です');\r\n }\r\n const data: Record<string, unknown> = {};\r\n for (const key of XPAGESPEED_KEYS) {\r\n if (fields[key] !== undefined) data[key] = fields[key];\r\n }\r\n if (Object.keys(data).length === 0) {\r\n throw new Error('更新するフィールドを1つ以上指定してください');\r\n }\r\n if (Object.keys(data).length > 1) {\r\n throw new Error('1リクエストで変更できるのは1つの最適化機能のみです');\r\n }\r\n return data;\r\n}\r\n\r\nexport function registerXPageSpeedTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'xpagespeed'), 'XPageSpeed設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listXPageSpeed(params));\r\n });\r\n\r\n server.tool(\r\n serverToolName(brand, 'update', 'xpagespeed'),\r\n 'XPageSpeedの最適化機能を変更(1リクエストで1機能のみ)',\r\n xPageSpeedUpdateSchema,\r\n async (args) => {\r\n const { domain, ...fields } = args;\r\n const data = buildUpdateBody({ domain, ...fields });\r\n return callApi(() => client.updateXPageSpeed(domain, data));\r\n },\r\n );\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst domainElementSchema = z.object({\r\n domain: z.string().describe('契約ドメイン'),\r\n elements: z.array(z.enum(['web', 'setting', 'mail'])).min(1).describe('対象種別(web / setting / mail)'),\r\n});\r\n\r\nexport function registerAutoBackupTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'auto_backup_backup_dates'), '選択可能なバックアップ日一覧を取得', {},\r\n async () => callApi(() => client.listAutoBackupBackupDates()));\r\n\r\n server.tool(serverToolName(brand, 'list', 'auto_backup'), '自動バックアップ申込履歴一覧を取得', {},\r\n async () => callApi(() => client.listAutoBackup()));\r\n\r\n server.tool(serverToolName(brand, 'get', 'auto_backup'), '自動バックアップ申込履歴の詳細を取得', {\r\n request_id: z.string().describe('申込ID(正の整数)'),\r\n }, async ({ request_id }) => callApi(() => client.getAutoBackup(request_id)));\r\n\r\n server.tool(serverToolName(brand, 'create', 'auto_backup'), '自動バックアップの取得または復元を申し込む', {\r\n backup_date: z.string().describe('対象バックアップ日(Y-m-d)'),\r\n operation_type: z.enum(['fetch', 'restore']).describe('処理種別(fetch: データ取得 / restore: 復元)'),\r\n scope: z.enum(['all', 'selected']).describe('処理方法(all: サーバー領域全体 / selected: 対象ドメイン・ディレクトリを指定)'),\r\n domain_elements: z.array(domainElementSchema).optional().describe('対象ドメイン・ディレクトリ(scope=selected のとき必須)'),\r\n }, async (args) => {\r\n const data: Record<string, unknown> = {\r\n backup_date: args.backup_date,\r\n operation_type: args.operation_type,\r\n scope: args.scope,\r\n };\r\n if (args.domain_elements !== undefined) {\r\n data.domain_elements = args.domain_elements;\r\n }\r\n return callApi(() => client.createAutoBackup(data));\r\n });\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerMysqlBackupTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'mysql_backup_databases'), 'MySQLバックアップの状態を取得', {},\r\n async () => callApi(() => client.listMysqlBackupDatabases()));\r\n\r\n server.tool(serverToolName(brand, 'list', 'mysql_backup'), 'MySQLバックアップ申込履歴一覧を取得', {},\r\n async () => callApi(() => client.listMysqlBackup()));\r\n\r\n server.tool(serverToolName(brand, 'get', 'mysql_backup'), 'MySQLバックアップ申込履歴詳細を取得', {\r\n request_id: z.string().describe('申込識別子(32文字の小文字16進数)'),\r\n }, async ({ request_id }) => callApi(() => client.getMysqlBackup(request_id)));\r\n\r\n server.tool(serverToolName(brand, 'create', 'mysql_backup'), 'MySQLバックアップの取得または復元を申し込む', {\r\n db_name: z.string().describe('データベース名'),\r\n backup_date: z.string().describe('対象バックアップ日(Y-m-d)'),\r\n operation_type: z.enum(['fetch', 'restore']).describe('処理種別(fetch: データ取得 / restore: 復元)'),\r\n }, async (args) => callApi(() => client.createMysqlBackup(args)));\r\n}\r\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { registerServerInfoTools } from './server/server-info.js';\r\nimport { registerCronTools } from './server/cron.js';\r\nimport { registerSshTools } from './server/ssh.js';\r\nimport { registerWordpressTools } from './server/wordpress.js';\r\nimport { registerMailTools } from './server/mail.js';\r\nimport { registerAutoReplyTools } from './server/auto-reply.js';\r\nimport { registerSmtpAbroadRestrictionTools } from './server/smtp-abroad-restriction.js';\r\nimport { registerDkimTools } from './server/dkim.js';\r\nimport { registerDmarcTools } from './server/dmarc.js';\r\nimport { registerSpfTools } from './server/spf.js';\r\nimport { registerSpamFilterTools } from './server/spam-filter.js';\r\nimport { registerFtpTools } from './server/ftp.js';\r\nimport { registerDatabaseTools } from './server/database.js';\r\nimport { registerDomainTools } from './server/domain.js';\r\nimport { registerSslDnsTools } from './server/ssl-dns.js';\r\nimport { registerResourceMonitorTools } from './server/resource-monitor.js';\r\nimport { registerWafTools } from './server/waf.js';\r\nimport { registerPhpIniTools } from './server/php-ini.js';\r\nimport { registerWordPressSecurityTools } from './server/wordpress-security.js';\r\nimport { registerXAcceleratorTools } from './server/x-accelerator.js';\r\nimport { registerServerCacheTools } from './server/server-cache.js';\r\nimport { registerBrowserCacheTools } from './server/browser-cache.js';\r\nimport { registerUrlRedirectTools } from './server/url-redirect.js';\r\nimport { registerAccessDenyTools } from './server/access-deny.js';\r\nimport { registerXPageSpeedTools } from './server/xpagespeed.js';\r\nimport { registerAutoBackupTools } from './server/auto-backup.js';\r\nimport { registerMysqlBackupTools } from './server/mysql-backup.js';\r\n\r\nexport function registerAllTools(server: McpServer, client: ApiClient, brand: BrandConfig): void {\r\n registerServerInfoTools(server, client, brand);\r\n registerCronTools(server, client, brand);\r\n registerSshTools(server, client, brand);\r\n registerWordpressTools(server, client, brand);\r\n registerMailTools(server, client, brand);\r\n registerAutoReplyTools(server, client, brand);\r\n registerSmtpAbroadRestrictionTools(server, client, brand);\r\n registerDkimTools(server, client, brand);\r\n registerDmarcTools(server, client, brand);\r\n registerSpfTools(server, client, brand);\r\n registerSpamFilterTools(server, client, brand);\r\n registerFtpTools(server, client, brand);\r\n registerDatabaseTools(server, client, brand);\r\n registerDomainTools(server, client, brand);\r\n registerSslDnsTools(server, client, brand);\r\n registerResourceMonitorTools(server, client, brand);\r\n registerWafTools(server, client, brand);\r\n registerPhpIniTools(server, client, brand);\r\n registerWordPressSecurityTools(server, client, brand);\r\n registerXAcceleratorTools(server, client, brand);\r\n registerServerCacheTools(server, client, brand);\r\n registerBrowserCacheTools(server, client, brand);\r\n registerUrlRedirectTools(server, client, brand);\r\n registerAccessDenyTools(server, client, brand);\r\n registerXPageSpeedTools(server, client, brand);\r\n registerAutoBackupTools(server, client, brand);\r\n registerMysqlBackupTools(server, client, brand);\r\n}\r\n","{\n \"name\": \"xserver-mcp\",\n \"version\": \"1.2.0\",\n \"description\": \"Official MCP server for XServer API — manage your XServer hosting from AI assistants\",\n \"type\": \"module\",\n \"bin\": {\n \"xserver-mcp\": \"./dist/index.js\"\n },\n \"main\": \"./dist/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"tsc\": \"tsc --noEmit\",\n \"start\": \"node dist/index.js\",\n \"prepublishOnly\": \"tsup\"\n },\n \"keywords\": [\n \"xserver\",\n \"mcp\",\n \"model-context-protocol\",\n \"ai\",\n \"hosting\",\n \"server\",\n \"api\"\n ],\n \"author\": \"Xserver Inc.\",\n \"license\": \"MIT\",\n \"homepage\": \"https://developer.xserver.ne.jp\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.12.0\",\n \"zod\": \"^3.24.0\"\n },\n \"devDependencies\": {\n \"xnp-mcp-core\": \"*\",\n \"xnp-shared\": \"*\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n }\n}\n","import { run } from 'xnp-mcp-core';\r\nimport pkg from '../package.json' with { type: 'json' };\r\n\r\nawait run({\r\n brand: 'xserver',\r\n apiBase: 'https://api.xserver.ne.jp',\r\n displayName: 'XServer',\r\n commandName: 'xserver-mcp',\r\n configDir: 'xserver-mcp',\r\n}, {\r\n name: pkg.name,\r\n version: pkg.version,\r\n});\r\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","z","z","z","z","z","PARTIAL_UPDATE_EMPTY_MESSAGE","z","z","z","z","z","PARTIAL_UPDATE_EMPTY_MESSAGE","z","z","z","z","z","z","z","z","z","z","z","PARTIAL_UPDATE_EMPTY_MESSAGE","z","z","PARTIAL_UPDATE_EMPTY_MESSAGE","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","buildUpdateBody","z","z","z","z"]}
1
+ {"version":3,"sources":["../../core/src/index.ts","../../../shared/src/api-client.ts","../../../shared/src/brand-config.ts","../../../shared/src/domain-acquisition-permission.ts","../../core/src/server-target.ts","../../core/src/helper.ts","../../core/src/tools/server/server-info.ts","../../core/src/tools/server/cron.ts","../../core/src/tools/server/ssh.ts","../../core/src/tools/server/wordpress.ts","../../core/src/tools/server/mail.ts","../../core/src/tools/server/auto-reply.ts","../../core/src/tools/server/smtp-abroad-restriction.ts","../../core/src/tools/server/dkim.ts","../../core/src/tools/server/dmarc.ts","../../core/src/tools/server/spf.ts","../../core/src/tools/server/spam-filter.ts","../../core/src/tools/server/ftp.ts","../../core/src/tools/server/database.ts","../../core/src/tools/server/domain.ts","../../core/src/tools/server/ssl-dns.ts","../../core/src/tools/server/resource-monitor.ts","../../core/src/tools/server/waf.ts","../../core/src/tools/server/php-ini.ts","../../core/src/tools/server/wordpress-security.ts","../../core/src/tools/server/x-accelerator.ts","../../core/src/tools/server/server-cache.ts","../../core/src/tools/server/browser-cache.ts","../../core/src/tools/server/url-redirect.ts","../../core/src/tools/server/access-deny.ts","../../core/src/tools/server/xpagespeed.ts","../../core/src/tools/server/auto-backup.ts","../../core/src/tools/server/mysql-backup.ts","../../core/src/tools/domain/index.ts","../../core/src/billing-confirmation.ts","../../core/src/tools/wphosting/index.ts","../../core/src/tools/index.ts","../package.json","../src/index.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { ApiClient } from 'xnp-shared';\nimport type { BrandConfig } from 'xnp-shared';\nimport { ServerTargetResolver } from './server-target.js';\nimport { registerAllTools } from './tools/index.js';\n\nexport type { BrandConfig } from 'xnp-shared';\n\nexport type McpService = 'server' | 'domain' | 'wphosting';\n\nexport interface RunOptions {\n /** MCPサーバー名(package.json の name と揃える。例: 'xserver-mcp') */\n name: string;\n /** MCPサーバーバージョン(package.json の version) */\n version: string;\n}\n\nconst MCP_SERVICES: readonly McpService[] = ['server', 'domain', 'wphosting'];\n\nfunction optionValue(argv: readonly string[], index: number): {\n value: string;\n nextIndex: number;\n} {\n const arg = argv[index];\n if (arg === '--services') {\n const value = argv[index + 1];\n if (!value || value.startsWith('--')) {\n throw new Error('--services requires a value.');\n }\n return { value, nextIndex: index + 1 };\n }\n return { value: arg.slice('--services='.length), nextIndex: index };\n}\n\nexport function parseMcpServices(\n argv: readonly string[] = process.argv.slice(2),\n supportedServices: readonly McpService[] = MCP_SERVICES,\n): McpService[] {\n let servicesValue: string | undefined;\n\n for (let i = 0; i < argv.length; i += 1) {\n const arg = argv[i];\n if (arg === '--services' || arg.startsWith('--services=')) {\n if (servicesValue !== undefined) {\n throw new Error('--services may be specified only once.');\n }\n const parsed = optionValue(argv, i);\n if (!parsed.value) throw new Error('--services requires a value.');\n servicesValue = parsed.value;\n i = parsed.nextIndex;\n } else {\n throw new Error(`Unknown argument \"${arg}\"; only --services is supported.`);\n }\n }\n\n if (servicesValue === undefined) return ['server'];\n\n if (servicesValue === 'all') {\n throw new Error('--services=all is not supported; list each service explicitly.');\n }\n\n const values = servicesValue!.split(',').map((value) => value.trim());\n if (values.length === 0 || values.some((value) => value === '')) {\n throw new Error('--services must be a comma-separated list without empty values.');\n }\n if (new Set(values).size !== values.length) {\n throw new Error('--services must not contain duplicate services.');\n }\n for (const value of values) {\n if (!supportedServices.includes(value as McpService)) {\n throw new Error(`Unknown or unsupported service \"${value}\".`);\n }\n }\n return values as McpService[];\n}\n\nfunction instructionsFor(services: readonly McpService[], brand: BrandConfig): string {\n const common = `「ドメイン一覧」「DNS変更」など対象サービスが曖昧な依頼では、操作前に利用者へ対象サービスを確認してください。\n推測だけで書き込み先を選ばず、書き込み前に対象サービス、契約、ドメインまたはサイトを明示してください。`;\n const sections: string[] = [];\n\n if (services.includes('server')) {\n sections.push(`Server — ${brand.displayName}のレンタルサーバーを管理します。\nサーバー情報、ドメイン・SSL・WordPress、メール、FTP、MySQL、Cron、SSH、DNS、PHP、ログ等を操作できます。\n操作前にlist/get系ツールで現在の状態を確認し、delete系は実行前に利用者の確認を取ってください。\nXSERVER_SERVERNAME等がある場合はそのサーバーに固定されます。未設定時はツールのservernameを使用し、対象が1台だけのAPIキーに限り省略時に自動選択します。複数対象またはすべて対象では、前回の操作先を引き継がずservernameの指定を求めます。`);\n }\n if (services.includes('domain')) {\n sections.push(`Domain — ドメインレジストラで保有・管理するドメインを操作します。レンタルサーバーのドメイン設定を操作するServer APIではありません。\nドメイン、ネームサーバー、レジストラ側DNS、Whois、レジストラロック、取得・移管・更新を管理できます。\n課金操作のexecuteを呼ぶ前にpreviewを実行し、対象、税込合計金額、取り消せないことを利用者へ提示してください。実申請はMCP form elicitationによるネイティブ確認が必須です。`);\n }\n if (services.includes('wphosting')) {\n sections.push(`WPhosting — XServer for WordPress契約サイトを管理します。レンタルサーバーServer APIのWordPress簡単インストール、DNS、Cron、SSHを操作するサービスではありません。\n対象はcontract_id(契約)とsite servername(本番またはステージング環境)の2軸で必ず指定してください。書き込み前に両方を利用者へ提示し、対象が曖昧なら推測せず確認してください。\n202操作はoperations APIを使わず、各ツール説明に記載したサイト、バックアップ、復元履歴の確認先でstatusまたは対象の消失を確認してください。\nサイト削除とバックアップ復元はpreviewで対象・影響を確認し、明示承認後にexecuteを実行してください。`);\n }\n\n return `${brand.displayName} MCP — 有効なサービス: ${services.join(', ')}\n\n${sections.join('\\n\\n')}\n\n${common}`;\n}\n\nexport async function run(brand: BrandConfig, options: RunOptions): Promise<void> {\n const envPrefix = brand.brand.toUpperCase();\n const apiKey = process.env[`${envPrefix}_API_KEY`] ?? process.env['XSERVER_API_KEY'];\n const servername = process.env[`${envPrefix}_SERVERNAME`] ?? process.env['XSERVER_SERVERNAME'];\n const baseUrl = process.env[`${envPrefix}_API_BASE_URL`];\n const enableHighRiskExecute = (\n process.env[`${envPrefix}_MCP_ENABLE_HIGH_RISK_EXECUTE`]\n ?? process.env.XSERVER_MCP_ENABLE_HIGH_RISK_EXECUTE\n ) === '1';\n let services: McpService[];\n\n try {\n const supportedServices: McpService[] = brand.brand === 'xserver'\n ? ['server', 'domain', 'wphosting']\n : ['server', 'domain'];\n services = parseMcpServices(process.argv.slice(2), supportedServices);\n } catch (error) {\n console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n\n if (!apiKey) {\n console.error(`Error: ${envPrefix}_API_KEY environment variable is required.`);\n console.error(`Get your API key at the ${brand.displayName} control panel.`);\n process.exit(1);\n }\n\n const apiBase = baseUrl ?? brand.apiBase;\n const client = new ApiClient({\n apiKey,\n apiBase,\n servername,\n });\n const serverTargetResolver = services.includes('server')\n ? new ServerTargetResolver({\n apiKey,\n apiBase,\n fixedServername: servername,\n })\n : undefined;\n\n const server = new McpServer({\n name: options.name,\n version: options.version,\n }, {\n instructions: instructionsFor(services, brand),\n });\n\n registerAllTools(server, client, brand, services, {\n enableHighRiskExecute,\n serverTargetResolver,\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n","const DEFAULT_TIMEOUT_MS = 30_000;\nconst SENSITIVE_FIELD_PATTERN = /(?:password|passphrase|private_key|secret|token|user_pass|auth_code)$/i;\n\nfunction redactSensitiveValues(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(redactSensitiveValues);\n if (typeof value !== 'object' || value === null) return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, child]) => [\n key,\n SENSITIVE_FIELD_PATTERN.test(key) ? '[REDACTED]' : redactSensitiveValues(child),\n ]),\n );\n}\n\nexport interface ApiErrorDetail {\n code: string;\n message: string;\n errors: string[];\n httpStatus: number;\n}\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n public readonly httpStatus: number,\n public readonly errorCode: string,\n public readonly errors: string[],\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\nexport interface RateLimitInfo {\n limit: number;\n remaining: number;\n reset: number;\n}\n\nexport interface ApiClientOptions {\n apiKey: string;\n apiBase: string;\n servername?: string;\n debug?: boolean;\n}\n\nexport class ApiClient {\n private readonly apiBase: string;\n private readonly apiKey: string;\n private readonly servername?: string;\n private readonly debug: boolean;\n public lastRateLimit: RateLimitInfo | null = null;\n\n constructor(opts: ApiClientOptions) {\n this.apiBase = opts.apiBase.replace(/\\/+$/, '');\n this.apiKey = opts.apiKey;\n this.servername = opts.servername;\n this.debug = opts.debug ?? false;\n }\n\n private serverPath(): string {\n if (!this.servername) {\n throw new Error('サーバー名が設定されていません。');\n }\n return `/v1/server/${encodeURIComponent(this.servername)}`;\n }\n\n // ================================================================\n // サーバー情報\n // ================================================================\n\n async getServerInfo(): Promise<unknown> {\n return this.get(`${this.serverPath()}/server-info`);\n }\n\n async getServerUsage(): Promise<unknown> {\n return this.get(`${this.serverPath()}/server-info/usage`);\n }\n\n // ================================================================\n // Cron\n // ================================================================\n\n async listCron(): Promise<unknown> {\n return this.get(`${this.serverPath()}/cron`);\n }\n\n async addCron(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/cron`, data);\n }\n\n async updateCron(cronId: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/cron/${enc(cronId)}`, data);\n }\n\n async deleteCron(cronId: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/cron/${enc(cronId)}`);\n }\n\n // ================================================================\n // WordPress\n // ================================================================\n\n async listWordpress(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/wp`, params);\n }\n\n async addWordpress(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/wp`, data);\n }\n\n async updateWordpress(wpId: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/wp/${enc(wpId)}`, data);\n }\n\n async deleteWordpress(wpId: string, data?: Record<string, unknown>): Promise<unknown> {\n return this.delete(`${this.serverPath()}/wp/${enc(wpId)}`, data);\n }\n\n // ================================================================\n // メールアカウント\n // ================================================================\n\n async listMail(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/mail`, params);\n }\n\n async getMail(mailAccount: string): Promise<unknown> {\n return this.get(`${this.serverPath()}/mail/${enc(mailAccount)}`);\n }\n\n async addMail(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/mail`, data);\n }\n\n async updateMail(mailAccount: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/mail/${enc(mailAccount)}`, data);\n }\n\n async deleteMail(mailAccount: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/mail/${enc(mailAccount)}`);\n }\n\n async getMailForwarding(mailAccount: string): Promise<unknown> {\n return this.get(`${this.serverPath()}/mail/${enc(mailAccount)}/forwarding`);\n }\n\n async updateMailForwarding(mailAccount: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/mail/${enc(mailAccount)}/forwarding`, data);\n }\n\n // ================================================================\n // メール振り分け\n // ================================================================\n\n async listMailFilter(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/mail-filter`, params);\n }\n\n async addMailFilter(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/mail-filter`, data);\n }\n\n async deleteMailFilter(filterId: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/mail-filter/${enc(filterId)}`);\n }\n\n // ================================================================\n // 迷惑メールフィルタ設定\n // ================================================================\n\n async listSpamFilter(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/spam-filter`, params);\n }\n\n async updateSpamFilter(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/spam-filter/${enc(domain)}`, data);\n }\n\n async updateSpamFilterDmarcReceiver(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/spam-filter/${enc(domain)}/dmarc-receiver`, data);\n }\n\n // ================================================================\n // 自動応答設定\n // ================================================================\n\n async listAutoReply(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/auto-reply`, params);\n }\n\n async getAutoReply(mailAddress: string): Promise<unknown> {\n return this.get(`${this.serverPath()}/auto-reply/${enc(mailAddress)}`);\n }\n\n async addAutoReply(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/auto-reply`, data);\n }\n\n async updateAutoReply(mailAddress: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/auto-reply/${enc(mailAddress)}`, data);\n }\n\n async deleteAutoReply(mailAddress: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/auto-reply/${enc(mailAddress)}`);\n }\n\n // ================================================================\n // SMTP認証国外アクセス制限\n // ================================================================\n\n async listSmtpAbroadRestriction(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/smtp-abroad-restriction`, params);\n }\n\n async updateSmtpAbroadRestriction(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/smtp-abroad-restriction/${enc(domain)}`, data);\n }\n\n // ================================================================\n // DKIM設定\n // ================================================================\n\n async listDkim(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/dkim`, params);\n }\n\n async getDkim(fqdn: string): Promise<unknown> {\n return this.get(`${this.serverPath()}/dkim/${enc(fqdn)}`);\n }\n\n async updateDkim(fqdn: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/dkim/${enc(fqdn)}`, data);\n }\n\n // ================================================================\n // SPF設定\n // ================================================================\n\n async listSpf(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/spf`, params);\n }\n\n async addSpf(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/spf`, data);\n }\n\n async updateSpf(fqdn: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/spf/${enc(fqdn)}`, data);\n }\n\n async deleteSpf(fqdn: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/spf/${enc(fqdn)}`);\n }\n\n // ================================================================\n // DMARC設定(送信側)\n // ================================================================\n\n async listDmarc(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/dmarc`, params);\n }\n\n async updateDmarc(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/dmarc/${enc(domain)}`, data);\n }\n\n // ================================================================\n // FTP\n // ================================================================\n\n async listFtp(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/ftp`, params);\n }\n\n async addFtp(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/ftp`, data);\n }\n\n async updateFtp(ftpAccount: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/ftp/${enc(ftpAccount)}`, data);\n }\n\n async deleteFtp(ftpAccount: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/ftp/${enc(ftpAccount)}`);\n }\n\n // ================================================================\n // MySQL\n // ================================================================\n\n async listDb(): Promise<unknown> {\n return this.get(`${this.serverPath()}/db`);\n }\n\n async addDb(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/db`, data);\n }\n\n async updateDb(dbName: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/db/${enc(dbName)}`, data);\n }\n\n async deleteDb(dbName: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/db/${enc(dbName)}`);\n }\n\n async listDbUser(): Promise<unknown> {\n return this.get(`${this.serverPath()}/db/user`);\n }\n\n async addDbUser(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/db/user`, data);\n }\n\n async updateDbUser(dbUser: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/db/user/${enc(dbUser)}`, data);\n }\n\n async deleteDbUser(dbUser: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/db/user/${enc(dbUser)}`);\n }\n\n async listDbUserGrant(dbUser: string): Promise<unknown> {\n return this.get(`${this.serverPath()}/db/user/${enc(dbUser)}/grant`);\n }\n\n async addDbUserGrant(dbUser: string, data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/db/user/${enc(dbUser)}/grant`, data);\n }\n\n async deleteDbUserGrant(dbUser: string, data?: Record<string, unknown>): Promise<unknown> {\n return this.delete(`${this.serverPath()}/db/user/${enc(dbUser)}/grant`, data);\n }\n\n // ================================================================\n // PHP バージョン\n // ================================================================\n\n async getPhpVersion(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/php-version`, params);\n }\n\n async updatePhpVersion(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/php-version/${enc(domain)}`, data);\n }\n\n // ================================================================\n // ドメイン(サーバーパネル)\n // ================================================================\n\n async listDomain(): Promise<unknown> {\n return this.get(`${this.serverPath()}/domain`);\n }\n\n async getDomain(domain: string): Promise<unknown> {\n return this.get(`${this.serverPath()}/domain/${enc(domain)}`);\n }\n\n async addDomain(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/domain`, data);\n }\n\n async updateDomain(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/domain/${enc(domain)}`, data);\n }\n\n async deleteDomain(domain: string, data?: Record<string, unknown>): Promise<unknown> {\n return this.delete(`${this.serverPath()}/domain/${enc(domain)}`, data);\n }\n\n async resetDomain(domain: string, data?: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/domain/${enc(domain)}/reset`, data);\n }\n\n // ================================================================\n // サブドメイン\n // ================================================================\n\n async listSubdomain(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/subdomain`, params);\n }\n\n async addSubdomain(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/subdomain`, data);\n }\n\n async updateSubdomain(subdomain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/subdomain/${enc(subdomain)}`, data);\n }\n\n async deleteSubdomain(subdomain: string, data?: Record<string, unknown>): Promise<unknown> {\n return this.delete(`${this.serverPath()}/subdomain/${enc(subdomain)}`, data);\n }\n\n // ================================================================\n // SSL\n // ================================================================\n\n async listSsl(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/ssl`, params);\n }\n\n async installSsl(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/ssl`, data);\n }\n\n async uninstallSsl(commonName: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/ssl/${enc(commonName)}`);\n }\n\n // ================================================================\n // DNS(サーバーパネル)\n // ================================================================\n\n async listDns(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/dns`, params);\n }\n\n async addDns(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/dns`, data);\n }\n\n async updateDns(dnsId: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/dns/${enc(dnsId)}`, data);\n }\n\n async deleteDns(dnsId: string, data?: Record<string, unknown>): Promise<unknown> {\n return this.delete(`${this.serverPath()}/dns/${enc(dnsId)}`, data);\n }\n\n // ================================================================\n // SSH\n // ================================================================\n\n async getSsh(): Promise<unknown> {\n return this.get(`${this.serverPath()}/ssh`);\n }\n\n async updateSsh(data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/ssh`, data);\n }\n\n async listSshKey(): Promise<unknown> {\n return this.get(`${this.serverPath()}/ssh/key`);\n }\n\n async addSshKey(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/ssh/key`, data);\n }\n\n async updateSshKey(keyId: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/ssh/key/${enc(keyId)}`, data);\n }\n\n async deleteSshKey(keyId: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/ssh/key/${enc(keyId)}`);\n }\n\n // ================================================================\n // リソースモニター\n // ================================================================\n\n async getResourceMonitor(date: string): Promise<unknown> {\n return this.get(`${this.serverPath()}/resource-monitor`, { date });\n }\n\n // ================================================================\n // WAF設定\n // ================================================================\n\n async listWaf(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/waf`, params);\n }\n\n async updateWaf(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/waf/${enc(domain)}`, data);\n }\n\n // ================================================================\n // php.ini設定\n // ================================================================\n\n async listPhpIni(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/php-ini`, params);\n }\n\n async updatePhpIni(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/php-ini/${enc(domain)}`, data);\n }\n\n async resetPhpIni(domain: string): Promise<unknown> {\n return this.post(`${this.serverPath()}/php-ini/${enc(domain)}/reset`);\n }\n\n // ================================================================\n // WordPressセキュリティ設定\n // ================================================================\n\n async getWordPressSecurity(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/wordpress-security`, params);\n }\n\n async updateWordPressSecurity(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/wordpress-security`, data);\n }\n\n // ================================================================\n // Xアクセラレータ設定\n // ================================================================\n\n async listXAccelerator(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/x-accelerator`, params);\n }\n\n async updateXAccelerator(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/x-accelerator/${enc(domain)}`, data);\n }\n\n // ================================================================\n // サーバーキャッシュ設定\n // ================================================================\n\n async listServerCache(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/server-cache`, params);\n }\n\n async updateServerCache(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/server-cache/${enc(domain)}`, data);\n }\n\n async clearServerCache(domain: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/server-cache/${enc(domain)}/cache`);\n }\n\n // ================================================================\n // ブラウザキャッシュ設定\n // ================================================================\n\n async listBrowserCache(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/browser-cache`, params);\n }\n\n async updateBrowserCache(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/browser-cache/${enc(domain)}`, data);\n }\n\n // ================================================================\n // サイト転送設定\n // ================================================================\n\n async listUrlRedirect(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/url-redirect`, params);\n }\n\n async addUrlRedirect(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/url-redirect`, data);\n }\n\n async deleteUrlRedirect(redirectId: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/url-redirect/${enc(redirectId)}`);\n }\n\n // ================================================================\n // アクセス拒否設定\n // ================================================================\n\n async listAccessDeny(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/access-deny`, params);\n }\n\n async addAccessDeny(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/access-deny`, data);\n }\n\n async updateAccessDeny(denyId: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/access-deny/${enc(denyId)}`, data);\n }\n\n async deleteAccessDeny(denyId: string): Promise<unknown> {\n return this.delete(`${this.serverPath()}/access-deny/${enc(denyId)}`);\n }\n\n // ================================================================\n // XPageSpeed設定\n // ================================================================\n\n async listXPageSpeed(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/xpagespeed`, params);\n }\n\n async updateXPageSpeed(domain: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.serverPath()}/xpagespeed/${enc(domain)}`, data);\n }\n\n // ================================================================\n // 自動バックアップの取得・復元\n // ================================================================\n\n async listAutoBackupBackupDates(): Promise<unknown> {\n return this.get(`${this.serverPath()}/auto-backup/backup-dates`);\n }\n\n async listAutoBackup(): Promise<unknown> {\n return this.get(`${this.serverPath()}/auto-backup`);\n }\n\n async getAutoBackup(requestId: string): Promise<unknown> {\n return this.get(`${this.serverPath()}/auto-backup/${enc(requestId)}`);\n }\n\n async createAutoBackup(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/auto-backup`, data);\n }\n\n // ================================================================\n // MySQLバックアップの取得・復元\n // ================================================================\n\n async listMysqlBackupDatabases(): Promise<unknown> {\n return this.get(`${this.serverPath()}/mysql-backup/databases`);\n }\n\n async listMysqlBackup(): Promise<unknown> {\n return this.get(`${this.serverPath()}/mysql-backup`);\n }\n\n async getMysqlBackup(requestId: string): Promise<unknown> {\n return this.get(`${this.serverPath()}/mysql-backup/${enc(requestId)}`);\n }\n\n async createMysqlBackup(data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.serverPath()}/mysql-backup`, data);\n }\n\n // ================================================================\n // ログ\n // ================================================================\n\n async getAccessLog(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/access-log`, params);\n }\n\n async getErrorLog(params?: Record<string, string>): Promise<unknown> {\n return this.get(`${this.serverPath()}/error-log`, params);\n }\n\n // ================================================================\n // APIキー情報\n // ================================================================\n\n async getMe(): Promise<unknown> {\n return this.get('/v1/me');\n }\n\n // ================================================================\n // ドメインサービスAPI(/v1/domain・servername非依存)\n // ================================================================\n\n private domainPath(domainName: string): string {\n return `/v1/domain/${enc(domainName)}`;\n }\n\n async listDomains(): Promise<unknown> {\n return this.get('/v1/domain');\n }\n\n async getDomainDetail(domainName: string): Promise<unknown> {\n return this.get(this.domainPath(domainName));\n }\n\n async getDomainNameservers(domainName: string): Promise<unknown> {\n return this.get(`${this.domainPath(domainName)}/nameservers`);\n }\n\n async updateDomainNameservers(domainName: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.domainPath(domainName)}/nameservers`, data);\n }\n\n async getDomainWhois(domainName: string): Promise<unknown> {\n return this.get(`${this.domainPath(domainName)}/whois`);\n }\n\n async updateDomainWhois(domainName: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.domainPath(domainName)}/whois`, data);\n }\n\n async getDomainRegistrarLock(domainName: string): Promise<unknown> {\n return this.get(`${this.domainPath(domainName)}/registrar-lock`);\n }\n\n async updateDomainRegistrarLock(domainName: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.domainPath(domainName)}/registrar-lock`, data);\n }\n\n async listDomainDns(domainName: string): Promise<unknown> {\n return this.get(`${this.domainPath(domainName)}/dns`);\n }\n\n async addDomainDns(domainName: string, data: Record<string, unknown>): Promise<unknown> {\n return this.post(`${this.domainPath(domainName)}/dns`, data);\n }\n\n async updateDomainDns(domainName: string, dnsId: string, data: Record<string, unknown>): Promise<unknown> {\n return this.put(`${this.domainPath(domainName)}/dns/${enc(dnsId)}`, data);\n }\n\n async deleteDomainDns(domainName: string, dnsId: string): Promise<unknown> {\n return this.delete(`${this.domainPath(domainName)}/dns/${enc(dnsId)}`);\n }\n\n async checkDomain(domainName: string): Promise<unknown> {\n return this.get('/v1/domain/check', { domain_name: domainName });\n }\n\n async getDomainPricing(params?: Record<string, string>): Promise<unknown> {\n return this.get('/v1/domain/pricing', params);\n }\n\n async registerDomain(data: Record<string, unknown>, idempotencyKey?: string): Promise<unknown> {\n return this.post('/v1/domain', data, idempotencyHeaders(idempotencyKey));\n }\n\n async transferDomain(\n domainName: string,\n data: Record<string, unknown>,\n idempotencyKey?: string,\n ): Promise<unknown> {\n return this.post(\n `${this.domainPath(domainName)}/transfer`,\n data,\n idempotencyHeaders(idempotencyKey),\n );\n }\n\n async renewDomain(\n domainName: string,\n data: Record<string, unknown>,\n idempotencyKey?: string,\n ): Promise<unknown> {\n return this.post(\n `${this.domainPath(domainName)}/renew`,\n data,\n idempotencyHeaders(idempotencyKey),\n );\n }\n\n // ================================================================\n // WPhosting API(/v1/wphosting/{contract_id})\n // ================================================================\n\n private wphostingPath(contractId: string): string {\n return `/v1/wphosting/${enc(contractId)}`;\n }\n\n private wphostingSitePath(contractId: string, servername: string): string {\n return `${this.wphostingPath(contractId)}/sites/${enc(servername)}`;\n }\n\n async listWphostingSites(contractId: string): Promise<unknown> {\n return this.get(`${this.wphostingPath(contractId)}/sites`);\n }\n\n async getWphostingSite(contractId: string, servername: string): Promise<unknown> {\n return this.get(this.wphostingSitePath(contractId, servername));\n }\n\n async createWphostingSite(\n contractId: string,\n data: Record<string, unknown>,\n idempotencyKey?: string,\n ): Promise<unknown> {\n return this.post(\n `${this.wphostingPath(contractId)}/sites`,\n data,\n idempotencyHeaders(idempotencyKey),\n );\n }\n\n async deleteWphostingSite(\n contractId: string,\n servername: string,\n idempotencyKey?: string,\n ): Promise<unknown> {\n return this.delete(\n this.wphostingSitePath(contractId, servername),\n undefined,\n idempotencyHeaders(idempotencyKey),\n );\n }\n\n async getWphostingUsage(contractId: string): Promise<unknown> {\n return this.get(`${this.wphostingPath(contractId)}/usage`);\n }\n\n async createWphostingStaging(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n idempotencyKey?: string,\n ): Promise<unknown> {\n return this.post(\n `${this.wphostingSitePath(contractId, servername)}/staging`,\n data,\n idempotencyHeaders(idempotencyKey),\n );\n }\n\n async listWphostingBackups(contractId: string, servername: string): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/backups`);\n }\n\n async createWphostingBackup(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n idempotencyKey?: string,\n ): Promise<unknown> {\n return this.post(\n `${this.wphostingSitePath(contractId, servername)}/backups`,\n data,\n idempotencyHeaders(idempotencyKey),\n );\n }\n\n async restoreWphostingBackup(\n contractId: string,\n servername: string,\n backupId: string,\n idempotencyKey?: string,\n ): Promise<unknown> {\n return this.post(\n `${this.wphostingSitePath(contractId, servername)}/backups/${enc(backupId)}/restore`,\n undefined,\n idempotencyHeaders(idempotencyKey),\n );\n }\n\n async listWphostingBackupRestoreHistory(\n contractId: string,\n servername: string,\n ): Promise<unknown> {\n return this.get(\n `${this.wphostingSitePath(contractId, servername)}/backups/restore-history`,\n );\n }\n\n async deleteWphostingBackup(\n contractId: string,\n servername: string,\n backupId: string,\n ): Promise<unknown> {\n return this.delete(\n `${this.wphostingSitePath(contractId, servername)}/backups/${enc(backupId)}`,\n );\n }\n\n async getWphostingWordPress(contractId: string, servername: string): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/wordpress`);\n }\n\n async updateWphostingWordPress(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(`${this.wphostingSitePath(contractId, servername)}/wordpress`, data);\n }\n\n async upgradeWphostingWordPress(\n contractId: string,\n servername: string,\n ): Promise<unknown> {\n return this.post(\n `${this.wphostingSitePath(contractId, servername)}/wordpress/update`,\n );\n }\n\n async getWphostingMaintenanceMode(\n contractId: string,\n servername: string,\n ): Promise<unknown> {\n return this.get(\n `${this.wphostingSitePath(contractId, servername)}/maintenance-mode`,\n );\n }\n\n async updateWphostingMaintenanceMode(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(\n `${this.wphostingSitePath(contractId, servername)}/maintenance-mode`,\n data,\n );\n }\n\n async listWphostingPlugins(contractId: string, servername: string): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/plugins`);\n }\n\n async installWphostingPlugin(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.post(`${this.wphostingSitePath(contractId, servername)}/plugins`, data);\n }\n\n async updateWphostingPlugin(\n contractId: string,\n servername: string,\n plugin: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(\n `${this.wphostingSitePath(contractId, servername)}/plugins/${enc(plugin)}`,\n data,\n );\n }\n\n async upgradeWphostingPlugin(\n contractId: string,\n servername: string,\n plugin: string,\n ): Promise<unknown> {\n return this.post(\n `${this.wphostingSitePath(contractId, servername)}/plugins/${enc(plugin)}/update`,\n );\n }\n\n async deleteWphostingPlugin(\n contractId: string,\n servername: string,\n plugin: string,\n ): Promise<unknown> {\n return this.delete(\n `${this.wphostingSitePath(contractId, servername)}/plugins/${enc(plugin)}`,\n );\n }\n\n async listWphostingThemes(contractId: string, servername: string): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/themes`);\n }\n\n async installWphostingTheme(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.post(`${this.wphostingSitePath(contractId, servername)}/themes`, data);\n }\n\n async updateWphostingTheme(\n contractId: string,\n servername: string,\n theme: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(\n `${this.wphostingSitePath(contractId, servername)}/themes/${enc(theme)}`,\n data,\n );\n }\n\n async upgradeWphostingTheme(\n contractId: string,\n servername: string,\n theme: string,\n ): Promise<unknown> {\n return this.post(\n `${this.wphostingSitePath(contractId, servername)}/themes/${enc(theme)}/update`,\n );\n }\n\n async deleteWphostingTheme(\n contractId: string,\n servername: string,\n theme: string,\n ): Promise<unknown> {\n return this.delete(\n `${this.wphostingSitePath(contractId, servername)}/themes/${enc(theme)}`,\n );\n }\n\n async listWphostingDomains(contractId: string, servername: string): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/domains`);\n }\n\n async addWphostingDomain(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.post(`${this.wphostingSitePath(contractId, servername)}/domains`, data);\n }\n\n async verifyWphostingDomain(\n contractId: string,\n servername: string,\n domain: string,\n ): Promise<unknown> {\n return this.post(\n `${this.wphostingSitePath(contractId, servername)}/domains/${enc(domain)}/verify`,\n );\n }\n\n async deleteWphostingDomain(\n contractId: string,\n servername: string,\n domain: string,\n ): Promise<unknown> {\n return this.delete(\n `${this.wphostingSitePath(contractId, servername)}/domains/${enc(domain)}`,\n );\n }\n\n async updateWphostingSiteUrl(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(`${this.wphostingSitePath(contractId, servername)}/site-url`, data);\n }\n\n async listWphostingDnsRecords(\n contractId: string,\n servername: string,\n domain: string,\n ): Promise<unknown> {\n return this.get(\n `${this.wphostingSitePath(contractId, servername)}/domains/${enc(domain)}/dns`,\n );\n }\n\n async addWphostingDnsRecord(\n contractId: string,\n servername: string,\n domain: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.post(\n `${this.wphostingSitePath(contractId, servername)}/domains/${enc(domain)}/dns`,\n data,\n );\n }\n\n async updateWphostingDnsRecord(\n contractId: string,\n servername: string,\n domain: string,\n dnsId: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(\n `${this.wphostingSitePath(contractId, servername)}/domains/${enc(domain)}/dns/${enc(dnsId)}`,\n data,\n );\n }\n\n async deleteWphostingDnsRecord(\n contractId: string,\n servername: string,\n domain: string,\n dnsId: string,\n ): Promise<unknown> {\n return this.delete(\n `${this.wphostingSitePath(contractId, servername)}/domains/${enc(domain)}/dns/${enc(dnsId)}`,\n );\n }\n\n async getWphostingPhpVersion(contractId: string, servername: string): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/php-version`);\n }\n\n async updateWphostingPhpVersion(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(\n `${this.wphostingSitePath(contractId, servername)}/php-version`,\n data,\n );\n }\n\n async getWphostingAccessLog(\n contractId: string,\n servername: string,\n params?: Record<string, string>,\n ): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/access-log`, params);\n }\n\n async getWphostingErrorLog(\n contractId: string,\n servername: string,\n params?: Record<string, string>,\n ): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/error-log`, params);\n }\n\n async listWphostingCron(contractId: string, servername: string): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/cron`);\n }\n\n async addWphostingCron(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.post(`${this.wphostingSitePath(contractId, servername)}/cron`, data);\n }\n\n async updateWphostingCron(\n contractId: string,\n servername: string,\n cronId: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(\n `${this.wphostingSitePath(contractId, servername)}/cron/${enc(cronId)}`,\n data,\n );\n }\n\n async deleteWphostingCron(\n contractId: string,\n servername: string,\n cronId: string,\n ): Promise<unknown> {\n return this.delete(\n `${this.wphostingSitePath(contractId, servername)}/cron/${enc(cronId)}`,\n );\n }\n\n async getWphostingSsh(contractId: string, servername: string): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/ssh`);\n }\n\n async updateWphostingSsh(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(`${this.wphostingSitePath(contractId, servername)}/ssh`, data);\n }\n\n async listWphostingSshKeys(contractId: string, servername: string): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/ssh/key`);\n }\n\n async addWphostingSshKey(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.post(`${this.wphostingSitePath(contractId, servername)}/ssh/key`, data);\n }\n\n async updateWphostingSshKey(\n contractId: string,\n servername: string,\n keyId: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(\n `${this.wphostingSitePath(contractId, servername)}/ssh/key/${enc(keyId)}`,\n data,\n );\n }\n\n async deleteWphostingSshKey(\n contractId: string,\n servername: string,\n keyId: string,\n ): Promise<unknown> {\n return this.delete(\n `${this.wphostingSitePath(contractId, servername)}/ssh/key/${enc(keyId)}`,\n );\n }\n\n async listWphostingWpUserRoles(\n contractId: string,\n servername: string,\n ): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/wp-users/roles`);\n }\n\n async listWphostingWpUsers(\n contractId: string,\n servername: string,\n params?: Record<string, string>,\n ): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/wp-users`, params);\n }\n\n async createWphostingWpUser(\n contractId: string,\n servername: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.post(`${this.wphostingSitePath(contractId, servername)}/wp-users`, data);\n }\n\n async getWphostingWpUser(\n contractId: string,\n servername: string,\n userId: string,\n ): Promise<unknown> {\n return this.get(\n `${this.wphostingSitePath(contractId, servername)}/wp-users/${enc(userId)}`,\n );\n }\n\n async updateWphostingWpUser(\n contractId: string,\n servername: string,\n userId: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(\n `${this.wphostingSitePath(contractId, servername)}/wp-users/${enc(userId)}`,\n data,\n );\n }\n\n async deleteWphostingWpUser(\n contractId: string,\n servername: string,\n userId: string,\n ): Promise<unknown> {\n return this.delete(\n `${this.wphostingSitePath(contractId, servername)}/wp-users/${enc(userId)}`,\n );\n }\n\n async getWphostingSecurity(\n contractId: string,\n servername: string,\n ): Promise<unknown> {\n return this.get(`${this.wphostingSitePath(contractId, servername)}/security`);\n }\n\n async updateWphostingSecurity(\n contractId: string,\n servername: string,\n key: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n return this.put(\n `${this.wphostingSitePath(contractId, servername)}/security/${enc(key)}`,\n data,\n );\n }\n\n // ================================================================\n // HTTP 基盤\n // ================================================================\n\n async get(path: string, params?: Record<string, string>): Promise<unknown> {\n let url = `${this.apiBase}${path}`;\n if (params && Object.keys(params).length > 0) {\n url += '?' + new URLSearchParams(params).toString();\n }\n return this.request('GET', url);\n }\n\n async post(\n path: string,\n data?: Record<string, unknown>,\n headers?: Record<string, string>,\n ): Promise<unknown> {\n return this.request('POST', `${this.apiBase}${path}`, data, headers);\n }\n\n async put(path: string, data?: Record<string, unknown>): Promise<unknown> {\n return this.request('PUT', `${this.apiBase}${path}`, data);\n }\n\n async delete(\n path: string,\n data?: Record<string, unknown>,\n headers?: Record<string, string>,\n ): Promise<unknown> {\n return this.request('DELETE', `${this.apiBase}${path}`, data, headers);\n }\n\n private async request(\n method: string,\n url: string,\n body?: Record<string, unknown>,\n additionalHeaders?: Record<string, string>,\n ): Promise<unknown> {\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Accept': 'application/json',\n ...additionalHeaders,\n };\n\n const init: RequestInit = {\n method,\n headers,\n signal: AbortSignal.timeout(DEFAULT_TIMEOUT_MS),\n };\n\n if (body && method !== 'GET') {\n headers['Content-Type'] = 'application/json';\n init.body = JSON.stringify(body);\n }\n\n if (this.debug) {\n const dbg = (msg: string) => process.stderr.write(`[DEBUG] ${msg}\\n`);\n dbg(`${method} ${url}`);\n if (body) dbg(`Body: ${JSON.stringify(redactSensitiveValues(body))}`);\n }\n\n let response: Response;\n try {\n response = await fetch(url, init);\n } catch (err) {\n throw new Error(`通信エラー: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n if (this.debug) {\n const dbg = (msg: string) => process.stderr.write(`[DEBUG] ${msg}\\n`);\n dbg(`HTTP ${response.status} ${response.statusText}`);\n const debugHeaders = ['x-ratelimit-limit', 'x-ratelimit-remaining', 'x-ratelimit-reset', 'x-concurrent-limit', 'x-concurrent-remaining', 'content-type'];\n for (const h of debugHeaders) {\n const v = response.headers.get(h);\n if (v !== null) dbg(` ${h}: ${v}`);\n }\n }\n\n const rateLimitHeader = response.headers.get('x-ratelimit-limit');\n if (rateLimitHeader) {\n this.lastRateLimit = {\n limit: parseInt(rateLimitHeader, 10),\n remaining: parseInt(response.headers.get('x-ratelimit-remaining') || '0', 10),\n reset: parseInt(response.headers.get('x-ratelimit-reset') || '0', 10),\n };\n }\n\n const text = await response.text();\n let data: unknown;\n try {\n data = JSON.parse(text);\n } catch {\n if (this.debug) {\n process.stderr.write(`[DEBUG] Raw response: ${text.substring(0, 500)}\\n`);\n }\n throw new ApiError(`Response parse error (HTTP ${response.status})`, response.status, 'PARSE_ERROR', []);\n }\n\n if (!response.ok) {\n const err = data as { error?: { code?: string; message?: string; errors?: string[] } };\n const errorCode = err?.error?.code || 'UNKNOWN_ERROR';\n const errorMessage = err?.error?.message || 'エラーが発生しました';\n const errors = err?.error?.errors || [];\n throw new ApiError(errorMessage, response.status, errorCode, errors);\n }\n\n return data;\n }\n}\n\nfunction enc(s: string): string {\n return encodeURIComponent(s);\n}\n\nfunction idempotencyHeaders(idempotencyKey?: string): Record<string, string> | undefined {\n return idempotencyKey === undefined\n ? undefined\n : { 'Idempotency-Key': idempotencyKey };\n}\n","/**\r\n * ブランド差分設定。\r\n * CLI/MCP の各ブランドパッケージから run() に渡される。\r\n */\r\nexport interface BrandConfig {\r\n /** 内部ID。環境変数のプレフィックスや brand キー判定に使用 */\r\n brand: string;\r\n /** API ベースURL */\r\n apiBase: string;\r\n /** ユーザー向け表示名(例: \"XServer\", \"シンクラウド\", \"Star8\") */\r\n displayName: string;\r\n /** Domainサービス利用規約URL */\r\n domainTermsUrl: string;\r\n /** Domainサービスの個人情報の取り扱いについてのURL */\r\n domainPrivacyUrl: string;\r\n /** CLIコマンド名(CLI専用、MCPでは無視されてOK) */\r\n commandName: string;\r\n /** 設定ファイル保存先ディレクトリ名(CLI専用) */\r\n configDir: string;\r\n}\r\n\r\nexport function domainLegalNoticeLines(\r\n brand: Pick<BrandConfig, 'domainTermsUrl' | 'domainPrivacyUrl'>,\r\n): string[] {\r\n return [\r\n `サービス利用規約: ${brand.domainTermsUrl}`,\r\n `個人情報の取り扱いについて: ${brand.domainPrivacyUrl}`,\r\n ];\r\n}\r\n","import { ApiError } from './api-client.js';\r\n\r\ntype UnknownRecord = Record<string, unknown>;\r\n\r\nexport interface DomainPermissionClient {\r\n getMe(): Promise<unknown>;\r\n}\r\n\r\nfunction record(value: unknown): UnknownRecord | undefined {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value) ? (value as UnknownRecord) : undefined;\r\n}\r\n\r\nfunction diagnosedForbidden(message: string): ApiError {\r\n return new ApiError(message, 403, 'FORBIDDEN', []);\r\n}\r\n\r\n/**\r\n * Domainの取得関連APIがFORBIDDENになった場合だけ /v1/me を参照し、\r\n * サービス未許可またはallow_acquisition=falseを利用者向けに診断する。\r\n * 診断できない場合は、原因を誤分類しないよう元のApiErrorを維持する。\r\n */\r\nexport async function withDomainAcquisitionPermissionDiagnosis<T>(\r\n client: DomainPermissionClient,\r\n request: () => Promise<T>,\r\n): Promise<T> {\r\n try {\r\n return await request();\r\n } catch (error) {\r\n if (!(error instanceof ApiError) || error.httpStatus !== 403 || error.errorCode !== 'FORBIDDEN') {\r\n throw error;\r\n }\r\n\r\n let meData: UnknownRecord;\r\n try {\r\n meData = (await client.getMe()) as UnknownRecord;\r\n } catch {\r\n throw error;\r\n }\r\n\r\n const services = record(meData.services);\r\n const domain = record(services?.domain);\r\n if (!domain) {\r\n throw diagnosedForbidden(\r\n 'このAPIキーではDomain APIを利用できません。Domainサービスを含むAPIキーを使用してください。',\r\n );\r\n }\r\n if (domain.allow_acquisition === false) {\r\n throw diagnosedForbidden(\r\n 'このAPIキーでは、ドメインの取得可能性・価格確認・新規取得・移管・契約更新が許可されていません。' +\r\n 'APIキー管理画面で「このキーでドメインの新規取得・移管・更新(お申し込み)を許可する」を有効にしたAPIキーを使用してください。',\r\n );\r\n }\r\n\r\n throw error;\r\n }\r\n}\r\n","import { AsyncLocalStorage } from 'node:async_hooks';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport { z } from 'zod';\r\nimport { ApiClient } from 'xnp-shared';\r\n\r\ntype UnknownRecord = Record<string, unknown>;\r\ntype ClientFactory = (servername?: string) => ApiClient;\r\n\r\nexport interface ServerTargetResolverOptions {\r\n apiKey: string;\r\n apiBase: string;\r\n fixedServername?: string;\r\n createClient?: ClientFactory;\r\n}\r\n\r\nexport const servernameInput = z\r\n .string()\r\n .min(1)\r\n .max(255)\r\n .optional()\r\n .describe('対象レンタルサーバーのservername。環境変数で固定している場合は省略し、固定値と異なる値は指定不可');\r\n\r\nfunction record(value: unknown): UnknownRecord | undefined {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value) ? (value as UnknownRecord) : undefined;\r\n}\r\n\r\nfunction strings(value: unknown): string[] {\r\n return Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string' && item !== '') : [];\r\n}\r\n\r\n/**\r\n * Server MCPの各ツール呼び出しを、固定または明示されたservernameのApiClientへ分離する。\r\n * AsyncLocalStorageにはApiClientだけを呼び出し中に保持し、前回の対象は引き継がない。\r\n */\r\nexport class ServerTargetResolver {\r\n private readonly fixedServername?: string;\r\n private readonly createClient: ClientFactory;\r\n private readonly accountClient: ApiClient;\r\n private readonly activeClient = new AsyncLocalStorage<ApiClient>();\r\n\r\n readonly client: ApiClient;\r\n\r\n constructor(options: ServerTargetResolverOptions) {\r\n this.fixedServername = options.fixedServername;\r\n this.createClient =\r\n options.createClient ??\r\n ((servername) =>\r\n new ApiClient({\r\n apiKey: options.apiKey,\r\n apiBase: options.apiBase,\r\n servername,\r\n }));\r\n this.accountClient = this.createClient();\r\n this.client = new Proxy(this.accountClient, {\r\n get: (target, property) => {\r\n const active = this.activeClient.getStore() ?? target;\r\n const value = Reflect.get(active, property, active) as unknown;\r\n return typeof value === 'function' ? value.bind(active) : value;\r\n },\r\n });\r\n }\r\n\r\n async resolve(requestedServername?: string): Promise<string> {\r\n if (this.fixedServername) {\r\n if (requestedServername && requestedServername !== this.fixedServername) {\r\n throw new Error(\r\n `このMCPはサーバー「${this.fixedServername}」に固定されています。` +\r\n `「${requestedServername}」は指定できません。`,\r\n );\r\n }\r\n return this.fixedServername;\r\n }\r\n\r\n if (requestedServername) {\r\n return requestedServername;\r\n }\r\n\r\n const meData = (await this.accountClient.getMe()) as UnknownRecord;\r\n const server = record(record(meData.services)?.server);\r\n if (!server) {\r\n throw new Error('このAPIキーではServer APIを利用できません。');\r\n }\r\n\r\n const targetMode = server.target_mode;\r\n const targets = strings(server.targets);\r\n if (targetMode === 'selected' && targets.length === 1) {\r\n return targets[0];\r\n }\r\n if (targetMode === 'selected' && targets.length > 1) {\r\n throw new Error('対象サーバーが複数あります。servernameを指定してください。' + ` 候補: ${targets.join(', ')}`);\r\n }\r\n if (targetMode === 'all') {\r\n throw new Error(\r\n 'このAPIキーはすべてのサーバーを対象としているため、対象を自動選択できません。' +\r\n 'servernameを指定してください。',\r\n );\r\n }\r\n\r\n throw new Error('対象サーバーを解決できません。servernameを指定してください。');\r\n }\r\n\r\n async run<T>(requestedServername: string | undefined, operation: () => Promise<T>): Promise<T> {\r\n const resolvedServername = await this.resolve(requestedServername);\r\n const client = this.createClient(resolvedServername);\r\n return this.activeClient.run(client, operation);\r\n }\r\n}\r\n\r\n/**\r\n * 既存112ツールの登録処理を変えず、全スキーマへservernameを追加して呼び出し単位で解決する。\r\n */\r\nexport function withServerTargetResolution(server: McpServer, resolver: ServerTargetResolver): McpServer {\r\n return new Proxy(server, {\r\n get(target, property, receiver) {\r\n if (property !== 'tool') {\r\n return Reflect.get(target, property, receiver) as unknown;\r\n }\r\n\r\n return (...registrationArgs: unknown[]) => {\r\n if (registrationArgs.length < 4) {\r\n throw new Error('Server tool registration requires an input schema.');\r\n }\r\n\r\n const schema = record(registrationArgs[2]);\r\n if (!schema) {\r\n throw new Error('Server tool input schema must be an object.');\r\n }\r\n registrationArgs[2] = { ...schema, servername: servernameInput };\r\n\r\n const callbackIndex = registrationArgs.length - 1;\r\n const callback = registrationArgs[callbackIndex];\r\n if (typeof callback !== 'function') {\r\n throw new Error('Server tool registration requires a callback.');\r\n }\r\n\r\n registrationArgs[callbackIndex] = async (input: UnknownRecord = {}, ...callbackArgs: unknown[]) => {\r\n const { servername, ...forwardedInput } = input;\r\n return resolver.run(\r\n typeof servername === 'string' ? servername : undefined,\r\n () => callback(forwardedInput, ...callbackArgs) as Promise<unknown>,\r\n );\r\n };\r\n\r\n return Reflect.apply(target.tool, target, registrationArgs);\r\n };\r\n },\r\n });\r\n}\r\n","import { ApiError } from 'xnp-shared';\nimport type { BrandConfig } from 'xnp-shared';\n\nexport type ToolResult = { content: { type: 'text'; text: string }[]; isError?: boolean };\n\nexport function serverToolName(brand: BrandConfig, action: string, feature: string): string {\n return `${brand.brand}_${action}_server_${feature}`;\n}\n\nexport function domainToolName(brand: BrandConfig, action: string, feature: string): string {\n return `${brand.brand}_${action}_domain_${feature}`;\n}\n\nexport function wphostingToolName(brand: BrandConfig, verb: string, resource: string): string {\n return `${brand.brand}_${verb}_wphosting_${resource}`;\n}\n\nexport async function callApi(fn: () => Promise<unknown>): Promise<ToolResult> {\n try {\n const result = await fn();\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };\n } catch (e) {\n let msg: string;\n if (e instanceof ApiError) {\n msg = `Error [HTTP ${e.httpStatus}] ${e.errorCode}: ${e.message}`;\n if (e.errors.length > 0) {\n msg += '\\n' + e.errors.map(err => ` - ${err}`).join('\\n');\n }\n } else if (e instanceof Error) {\n msg = `Error: ${e.message}`;\n } else {\n msg = `Error: ${String(e)}`;\n }\n return { content: [{ type: 'text', text: msg }], isError: true };\n }\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerServerInfoTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'get', 'info'), 'サーバーのOS・CPU・メモリ・利用可能なPHP/DBバージョン等を取得', {},\r\n async () => callApi(() => client.getServerInfo()));\r\n\r\n server.tool(serverToolName(brand, 'get', 'usage'), 'ディスク使用量・ファイル数・ドメイン数等のサーバー利用状況を取得', {},\r\n async () => callApi(() => client.getServerUsage()));\r\n}\r\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ApiClient, BrandConfig } from \"xnp-shared\";\nimport { callApi, serverToolName } from \"../../helper.js\";\n\nexport function registerCronTools(\n server: McpServer,\n client: ApiClient,\n brand: BrandConfig\n) {\n server.tool(\n serverToolName(brand, \"list\", \"cron\"),\n \"Cron設定の一覧を取得\",\n {},\n async () => callApi(() => client.listCron())\n );\n\n server.tool(\n serverToolName(brand, \"add\", \"cron\"),\n \"Cronジョブを新規追加\",\n {\n minute: z.string().describe(\"分(0-59, */5 等)\"),\n hour: z.string().describe(\"時(0-23, * 等)\"),\n day: z.string().default(\"*\").describe(\"日(1-31, * 等)\"),\n month: z.string().default(\"*\").describe(\"月(1-12, * 等)\"),\n weekday: z.string().default(\"*\").describe(\"曜日(0-7, * 等)\"),\n command: z.string().describe(\"実行コマンド\"),\n comment: z.string().optional().describe(\"メモ\"),\n },\n async (args) => callApi(() => client.addCron(args))\n );\n\n server.tool(\n serverToolName(brand, \"update\", \"cron\"),\n \"Cronジョブを更新\",\n {\n cron_id: z.string().describe(\"CronのID\"),\n minute: z.string().optional().describe(\"分\"),\n hour: z.string().optional().describe(\"時\"),\n day: z.string().optional().describe(\"日\"),\n month: z.string().optional().describe(\"月\"),\n weekday: z.string().optional().describe(\"曜日\"),\n command: z.string().optional().describe(\"実行コマンド\"),\n comment: z.string().optional().describe(\"メモ\"),\n enabled: z.boolean().optional().describe(\"有効/無効\"),\n },\n async ({ cron_id, ...data }) =>\n callApi(() => {\n const update = Object.fromEntries(\n Object.entries(data).filter(([, value]) => value !== undefined)\n );\n if (Object.keys(update).length === 0) {\n throw new Error(\"更新項目を1つ以上指定してください。\");\n }\n return client.updateCron(cron_id, update);\n })\n );\n\n server.tool(\n serverToolName(brand, \"delete\", \"cron\"),\n \"Cronジョブを削除\",\n {\n cron_id: z.string().describe(\"CronのID\"),\n },\n async ({ cron_id }) => callApi(() => client.deleteCron(cron_id))\n );\n}\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerSshTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'get', 'ssh'), 'SSH設定(有効/無効、国外アクセス制限、接続情報)を取得', {},\r\n async () => callApi(() => client.getSsh()));\r\n\r\n server.tool(serverToolName(brand, 'update', 'ssh'), 'SSH設定を変更(有効/無効、国外アクセス制限)', {\r\n ssh_enabled: z.boolean().optional().describe('SSH接続の有効/無効'),\r\n abroad_access_restriction: z.boolean().optional().describe('国外アクセス制限の有効/無効'),\r\n }, async (args) => callApi(() => client.updateSsh(args)));\r\n\r\n server.tool(serverToolName(brand, 'list', 'ssh_key'), 'SSH公開鍵の一覧を取得', {},\r\n async () => callApi(() => client.listSshKey()));\r\n\r\n server.tool(serverToolName(brand, 'add', 'ssh_key'), 'SSH公開鍵を登録(手動登録またはサーバー側で鍵ペア自動生成)', {\r\n label: z.string().describe('ラベル'),\r\n public_key: z.string().optional().describe('公開鍵(手動登録時。OpenSSH形式)'),\r\n generate: z.boolean().optional().describe('trueでサーバー側で鍵ペアを自動生成(秘密鍵が返却される)'),\r\n passphrase: z.string().optional().describe('パスフレーズ(自動生成時。6〜32文字)'),\r\n }, async (args) => callApi(() => client.addSshKey(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'ssh_key'), 'SSH公開鍵のラベルやステータスを更新', {\r\n key_id: z.string().describe('公開鍵ID'),\r\n label: z.string().optional().describe('ラベル'),\r\n status: z.enum(['on', 'off']).optional().describe('ステータス'),\r\n }, async ({ key_id, ...data }) => callApi(() => client.updateSshKey(key_id, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'ssh_key'), 'SSH公開鍵を削除', {\r\n key_id: z.string().describe('公開鍵ID'),\r\n }, async ({ key_id }) => callApi(() => client.deleteSshKey(key_id)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerWordpressTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'wordpress'), 'WordPress一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listWordpress(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'wordpress'), 'WordPressを新規インストール', {\r\n url: z.string().describe('インストール先URL(例: https://example.com/blog)'),\r\n title: z.string().describe('サイトタイトル'),\r\n admin_username: z.string().describe('管理者ユーザー名'),\r\n admin_password: z.string().describe('管理者パスワード'),\r\n admin_email: z.string().describe('管理者メールアドレス'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addWordpress(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'wordpress'), 'WordPressのメモを更新', {\r\n wp_id: z.string().describe('WordPressのID'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ wp_id, ...data }) => callApi(() => client.updateWordpress(wp_id, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'wordpress'), 'WordPressをアンインストール', {\r\n wp_id: z.string().describe('WordPressのID'),\r\n delete_db: z.boolean().optional().describe('関連データベースも削除するか'),\r\n }, async ({ wp_id, ...data }) => callApi(() => client.deleteWordpress(wp_id, data)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerMailTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'mail'), 'メールアカウント一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listMail(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'get', 'mail'), 'メールアカウントの詳細(容量等)を取得', {\r\n mail_account: z.string().describe('メールアドレス'),\r\n }, async ({ mail_account }) => callApi(() => client.getMail(mail_account)));\r\n\r\n server.tool(serverToolName(brand, 'add', 'mail'), 'メールアカウントを作成', {\r\n mail_address: z.string().describe('メールアドレス(user@domain 形式)'),\r\n password: z.string().describe('パスワード'),\r\n quota_mb: z.number().optional().describe('容量制限(MB)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addMail(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'mail'), 'メールアカウントを更新', {\r\n mail_account: z.string().describe('メールアドレス'),\r\n password: z.string().optional().describe('パスワード'),\r\n quota_mb: z.number().optional().describe('容量制限(MB)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ mail_account, ...data }) => callApi(() => client.updateMail(mail_account, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'mail'), 'メールアカウントを削除', {\r\n mail_account: z.string().describe('メールアドレス'),\r\n }, async ({ mail_account }) => callApi(() => client.deleteMail(mail_account)));\r\n\r\n server.tool(serverToolName(brand, 'get', 'mail_forwarding'), 'メール転送設定を取得', {\r\n mail_account: z.string().describe('メールアドレス'),\r\n }, async ({ mail_account }) => callApi(() => client.getMailForwarding(mail_account)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'mail_forwarding'), 'メール転送設定を更新', {\r\n mail_account: z.string().describe('メールアドレス'),\r\n forwarding_addresses: z.array(z.string()).describe('転送先メールアドレスの配列'),\r\n keep_in_mailbox: z.boolean().optional().describe('メールボックスにも残すか'),\r\n }, async ({ mail_account, ...data }) => callApi(() => client.updateMailForwarding(mail_account, data)));\r\n\r\n server.tool(serverToolName(brand, 'list', 'mail_filter'), 'メール振り分け設定の一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listMailFilter(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'mail_filter'), 'メール振り分けルールを追加', {\r\n domain: z.string().describe('対象ドメイン'),\r\n conditions: z.array(z.object({\r\n keyword: z.string(),\r\n field: z.string(),\r\n match_type: z.string(),\r\n })).describe('条件'),\r\n action: z.object({\r\n type: z.string(),\r\n target: z.string(),\r\n method: z.string(),\r\n }).describe('アクション'),\r\n }, async (args) => callApi(() => client.addMailFilter(args)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'mail_filter'), 'メール振り分けルールを削除', {\r\n filter_id: z.string().describe('フィルターID'),\r\n }, async ({ filter_id }) => callApi(() => client.deleteMailFilter(filter_id)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst PARTIAL_UPDATE_EMPTY_MESSAGE = '更新するフィールドを1つ以上指定してください';\r\n\r\nexport function registerAutoReplyTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'auto_reply'), '自動応答設定の一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listAutoReply(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'get', 'auto_reply'), '自動応答設定の詳細を取得', {\r\n mail_address: z.string().describe('メールアドレス'),\r\n }, async ({ mail_address }) => callApi(() => client.getAutoReply(mail_address)));\r\n\r\n server.tool(serverToolName(brand, 'add', 'auto_reply'), '自動応答設定を追加', {\r\n domain: z.string().describe('対象ドメイン'),\r\n mail_address: z.string().describe('メールアドレス'),\r\n from_name: z.string().describe('送信者名'),\r\n subject: z.string().describe('件名'),\r\n body: z.string().describe('本文'),\r\n quote_incoming: z.boolean().describe('受信メールの引用を含めるか'),\r\n }, async (args) => callApi(() => client.addAutoReply(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'auto_reply'), '自動応答設定を更新(指定した項目のみ)', {\r\n mail_address: z.string().describe('メールアドレス'),\r\n from_name: z.string().optional().describe('送信者名'),\r\n subject: z.string().optional().describe('件名'),\r\n body: z.string().optional().describe('本文'),\r\n quote_incoming: z.boolean().optional().describe('受信メールの引用を含めるか'),\r\n }, async ({ mail_address, from_name, subject, body, quote_incoming }) => {\r\n const data: Record<string, unknown> = {};\r\n if (from_name !== undefined) data.from_name = from_name;\r\n if (subject !== undefined) data.subject = subject;\r\n if (body !== undefined) data.body = body;\r\n if (quote_incoming !== undefined) data.quote_incoming = quote_incoming;\r\n if (Object.keys(data).length === 0) {\r\n throw new Error(PARTIAL_UPDATE_EMPTY_MESSAGE);\r\n }\r\n return callApi(() => client.updateAutoReply(mail_address, data));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'delete', 'auto_reply'), '自動応答設定を削除', {\r\n mail_address: z.string().describe('メールアドレス'),\r\n }, async ({ mail_address }) => callApi(() => client.deleteAutoReply(mail_address)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerSmtpAbroadRestrictionTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(\r\n serverToolName(brand, 'list', 'smtp_abroad_restriction'),\r\n 'SMTP認証の国外アクセス制限設定を取得',\r\n {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n },\r\n async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listSmtpAbroadRestriction(params));\r\n },\r\n );\r\n\r\n server.tool(\r\n serverToolName(brand, 'update', 'smtp_abroad_restriction'),\r\n 'SMTP認証の国外アクセス制限設定を更新',\r\n {\r\n domain: z.string().describe('対象ドメイン'),\r\n abroad_access_restriction: z.boolean().describe('国外アクセス制限の有効/無効'),\r\n },\r\n async ({ domain, abroad_access_restriction }) =>\r\n callApi(() => client.updateSmtpAbroadRestriction(domain, { abroad_access_restriction })),\r\n );\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerDkimTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'dkim'), 'DKIM設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listDkim(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'get', 'dkim'), 'DKIM設定の詳細を取得', {\r\n fqdn: z.string().describe('FQDN(example.com または sub.example.com)'),\r\n }, async ({ fqdn }) => callApi(() => client.getDkim(fqdn)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'dkim'), 'DKIM設定の有効/無効を切り替え', {\r\n fqdn: z.string().describe('FQDN(example.com または sub.example.com)'),\r\n enabled: z.boolean().describe('DKIMの有効/無効'),\r\n }, async ({ fqdn, enabled }) => callApi(() => client.updateDkim(fqdn, { enabled })));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst PARTIAL_UPDATE_EMPTY_MESSAGE = '更新するフィールドを1つ以上指定してください';\r\n\r\nexport function registerDmarcTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'dmarc'), '送信側DMARC設定を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listDmarc(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'dmarc'), '送信側DMARC設定を更新(指定した項目のみ)', {\r\n domain: z.string().describe('対象ドメイン'),\r\n policy: z.enum(['none', 'quarantine', 'reject']).optional().describe('DMARCポリシー'),\r\n report_enabled: z.boolean().optional().describe('レポート通知の有効/無効。false のとき通知先メールアドレスは自動的に空になる'),\r\n notification_mail_addresses: z.array(z.string()).optional().describe('レポート通知先メールアドレス。report_enabled が true のときは1件以上必須'),\r\n }, async ({ domain, policy, report_enabled, notification_mail_addresses }) => {\r\n const data: Record<string, unknown> = {};\r\n if (policy !== undefined) data.policy = policy;\r\n if (report_enabled !== undefined) data.report_enabled = report_enabled;\r\n if (notification_mail_addresses !== undefined) {\r\n data.notification_mail_addresses = notification_mail_addresses;\r\n }\r\n if (Object.keys(data).length === 0) {\r\n throw new Error(PARTIAL_UPDATE_EMPTY_MESSAGE);\r\n }\r\n return callApi(() => client.updateDmarc(domain, data));\r\n });\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst updateActionSchema = z.enum(['reset', 'enable_gmail', 'custom']);\r\n\r\nexport function registerSpfTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'spf'), 'SPF設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listSpf(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'spf'), 'SPF設定を追加', {\r\n fqdn: z.string().describe('FQDN(example.com または sub.example.com)'),\r\n }, async ({ fqdn }) => callApi(() => client.addSpf({ fqdn })));\r\n\r\n server.tool(serverToolName(brand, 'update', 'spf'), 'SPF設定を更新', {\r\n fqdn: z.string().describe('FQDN'),\r\n action: updateActionSchema.describe('reset: 標準SPFへ初期化 / enable_gmail: Gmail許可ON / custom: カスタム設定'),\r\n spf_record: z.string().optional().describe('カスタムSPFレコード(action=custom のとき必須)'),\r\n }, async ({ fqdn, action, spf_record }) => {\r\n const body: Record<string, unknown> = { action };\r\n if (action === 'custom') {\r\n if (spf_record === undefined || spf_record === '') {\r\n throw new Error('action=custom のときは spf_record が必須です');\r\n }\r\n body.spf_record = spf_record;\r\n }\r\n return callApi(() => client.updateSpf(fqdn, body));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'delete', 'spf'), 'SPF設定を削除', {\r\n fqdn: z.string().describe('FQDN'),\r\n }, async ({ fqdn }) => callApi(() => client.deleteSpf(fqdn)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst filterTypeSchema = z.enum(['off', 'standard', 'cloudmark_authority']);\r\nconst detectionActionSchema = z.enum(['inbox', 'spam', 'trash', 'delete']);\r\nconst spamLevelSchema = z.enum(['very_lenient', 'lenient', 'normal', 'strict', 'very_strict', 'strictest']);\r\n\r\nconst PARTIAL_UPDATE_EMPTY_MESSAGE = '更新するフィールドを1つ以上指定してください';\r\n\r\nexport function registerSpamFilterTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'spam_filter'), '迷惑メールフィルタ設定を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listSpamFilter(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'spam_filter'), '迷惑メールフィルタ設定を更新(指定した項目のみ)', {\r\n domain: z.string().describe('対象ドメイン'),\r\n filter_type: filterTypeSchema.optional().describe('迷惑メールフィルタ'),\r\n detection_action: detectionActionSchema.optional().describe('検知時の処理(inbox / spam / trash / delete)'),\r\n white_list: z.array(z.string()).optional().describe('ホワイトリスト(空配列でクリア)'),\r\n black_list: z.array(z.string()).optional().describe('ブラックリスト(空配列でクリア)'),\r\n spam_level: spamLevelSchema.optional().describe('標準スパムフィルタ判定基準'),\r\n strict_non_japanese_subject: z.boolean().optional().describe('日本語を含まない件名に対して判定を厳しくする'),\r\n strict_html_mail: z.boolean().optional().describe('HTMLメールに対して判定を厳しくする'),\r\n }, async (args) => {\r\n const { domain, ...fields } = args;\r\n const data: Record<string, unknown> = {};\r\n if (fields.filter_type !== undefined) data.filter_type = fields.filter_type;\r\n if (fields.detection_action !== undefined) data.detection_action = fields.detection_action;\r\n if (fields.white_list !== undefined) data.white_list = fields.white_list;\r\n if (fields.black_list !== undefined) data.black_list = fields.black_list;\r\n if (fields.spam_level !== undefined) data.spam_level = fields.spam_level;\r\n if (fields.strict_non_japanese_subject !== undefined) {\r\n data.strict_non_japanese_subject = fields.strict_non_japanese_subject;\r\n }\r\n if (fields.strict_html_mail !== undefined) data.strict_html_mail = fields.strict_html_mail;\r\n if (Object.keys(data).length === 0) {\r\n throw new Error(PARTIAL_UPDATE_EMPTY_MESSAGE);\r\n }\r\n return callApi(() => client.updateSpamFilter(domain, data));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'spam_filter_dmarc_receiver'), '受信側DMARC設定を更新', {\r\n domain: z.string().describe('対象ドメイン'),\r\n dmarc_receiver: z.boolean().describe('受信側DMARC設定'),\r\n }, async ({ domain, dmarc_receiver }) => callApi(() => client.updateSpamFilterDmarcReceiver(domain, { dmarc_receiver })));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerFtpTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'ftp'), 'FTPアカウント一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listFtp(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'ftp'), 'FTPアカウントを追加', {\r\n ftp_account: z.string().describe('FTPアカウント(user@domain 形式)'),\r\n password: z.string().describe('パスワード'),\r\n directory: z.string().optional().describe('ディレクトリ'),\r\n quota_mb: z.number().optional().describe('容量制限(MB。0で無制限)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addFtp(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'ftp'), 'FTPアカウントを更新', {\r\n ftp_account: z.string().describe('FTPアカウント'),\r\n password: z.string().optional().describe('パスワード'),\r\n directory: z.string().optional().describe('ディレクトリ'),\r\n quota_mb: z.number().optional().describe('容量制限(MB)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ ftp_account, ...data }) => callApi(() => client.updateFtp(ftp_account, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'ftp'), 'FTPアカウントを削除', {\r\n ftp_account: z.string().describe('FTPアカウント'),\r\n }, async ({ ftp_account }) => callApi(() => client.deleteFtp(ftp_account)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerDatabaseTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'db'), 'MySQL データベース一覧を取得', {},\r\n async () => callApi(() => client.listDb()));\r\n\r\n server.tool(serverToolName(brand, 'add', 'db'), 'MySQL データベースを作成', {\r\n name_suffix: z.string().describe('DB名のサフィックス(プレフィックスは自動付与)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addDb(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'db'), 'MySQL データベースのメモを更新', {\r\n db_name: z.string().describe('データベース名'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ db_name, ...data }) => callApi(() => client.updateDb(db_name, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'db'), 'MySQL データベースを削除', {\r\n db_name: z.string().describe('データベース名'),\r\n }, async ({ db_name }) => callApi(() => client.deleteDb(db_name)));\r\n\r\n server.tool(serverToolName(brand, 'list', 'db_user'), 'MySQL ユーザー一覧を取得', {},\r\n async () => callApi(() => client.listDbUser()));\r\n\r\n server.tool(serverToolName(brand, 'add', 'db_user'), 'MySQL ユーザーを作成', {\r\n name_suffix: z.string().describe('ユーザー名のサフィックス'),\r\n password: z.string().describe('パスワード'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addDbUser(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'db_user'), 'MySQL ユーザーのパスワード等を変更', {\r\n db_user: z.string().describe('ユーザー名'),\r\n password: z.string().optional().describe('パスワード'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ db_user, ...data }) => callApi(() => client.updateDbUser(db_user, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'db_user'), 'MySQL ユーザーを削除', {\r\n db_user: z.string().describe('ユーザー名'),\r\n }, async ({ db_user }) => callApi(() => client.deleteDbUser(db_user)));\r\n\r\n server.tool(serverToolName(brand, 'list', 'db_user_grant'), 'MySQL ユーザーのデータベース権限を取得', {\r\n db_user: z.string().describe('ユーザー名'),\r\n }, async ({ db_user }) => callApi(() => client.listDbUserGrant(db_user)));\r\n\r\n server.tool(serverToolName(brand, 'add', 'db_user_grant'), 'MySQL ユーザーにデータベース権限を付与', {\r\n db_user: z.string().describe('ユーザー名'),\r\n db_name: z.string().describe('データベース名'),\r\n }, async ({ db_user, ...data }) => callApi(() => client.addDbUserGrant(db_user, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'db_user_grant'), 'MySQL ユーザーからデータベース権限を削除', {\r\n db_user: z.string().describe('ユーザー名'),\r\n db_name: z.string().describe('データベース名'),\r\n }, async ({ db_user, ...data }) => callApi(() => client.deleteDbUserGrant(db_user, data)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerDomainTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'domain'), 'ドメイン一覧を取得', {},\r\n async () => callApi(() => client.listDomain()));\r\n\r\n server.tool(serverToolName(brand, 'get', 'domain'), 'ドメインの詳細情報を取得', {\r\n domain: z.string().describe('ドメイン名'),\r\n }, async ({ domain }) => callApi(() => client.getDomain(domain)));\r\n\r\n server.tool(serverToolName(brand, 'add', 'domain'), 'ドメインを追加', {\r\n domain: z.string().describe('ドメイン名'),\r\n ssl: z.boolean().optional().describe('無料SSL設定(デフォルト: true)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addDomain(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'domain'), 'ドメインのメモを更新', {\r\n domain: z.string().describe('ドメイン名'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ domain, ...data }) => callApi(() => client.updateDomain(domain, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'domain'), 'ドメインを削除', {\r\n domain: z.string().describe('ドメイン名'),\r\n }, async ({ domain }) => callApi(() => client.deleteDomain(domain)));\r\n\r\n server.tool(serverToolName(brand, 'list', 'subdomain'), 'サブドメイン一覧を取得', {\r\n domain: z.string().optional().describe('親ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listSubdomain(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'subdomain'), 'サブドメインを追加', {\r\n subdomain: z.string().describe('サブドメイン(例: blog.example.com)'),\r\n document_root_type: z.enum(['subdomain_only', 'full_subdomain']).optional().describe('ドキュメントルート種別(subdomain_only: /public_html/sub, full_subdomain: /public_html/sub.example.com)'),\r\n ssl: z.boolean().optional().describe('無料SSL設定(デフォルト: true)'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async (args) => callApi(() => client.addSubdomain(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'subdomain'), 'サブドメインのメモを更新', {\r\n subdomain: z.string().describe('サブドメイン'),\r\n memo: z.string().optional().describe('メモ'),\r\n }, async ({ subdomain, ...data }) => callApi(() => client.updateSubdomain(subdomain, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'subdomain'), 'サブドメインを削除', {\r\n subdomain: z.string().describe('サブドメイン'),\r\n delete_files: z.boolean().optional().describe('関連ファイルも削除するか'),\r\n }, async ({ subdomain, ...data }) => callApi(() => client.deleteSubdomain(subdomain, data)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerSslDnsTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n // SSL\r\n server.tool(serverToolName(brand, 'list', 'ssl'), 'SSL設定の一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listSsl(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'install', 'ssl'), '無料SSL(Let\\'s Encrypt)をインストール', {\r\n common_name: z.string().describe('コモンネーム(ドメイン名)'),\r\n }, async (args) => callApi(() => client.installSsl(args)));\r\n\r\n server.tool(serverToolName(brand, 'uninstall', 'ssl'), '無料SSLをアンインストール', {\r\n common_name: z.string().describe('コモンネーム(ドメイン名)'),\r\n }, async ({ common_name }) => callApi(() => client.uninstallSsl(common_name)));\r\n\r\n // DNS\r\n server.tool(serverToolName(brand, 'list', 'dns'), 'DNSレコード一覧を取得', {\r\n domain: z.string().optional().describe('ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listDns(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'dns'), 'DNSレコードを追加', {\r\n domain: z.string().describe('対象ドメイン'),\r\n host: z.string().describe('ホスト名(@でapex)'),\r\n type: z.string().describe('レコードタイプ(A / AAAA / CNAME / MX / TXT / SRV / CAA)'),\r\n content: z.string().describe('レコード値'),\r\n ttl: z.number().optional().describe('TTL(60-86400。デフォルト: 3600)'),\r\n priority: z.number().optional().describe('優先度(MX/SRVレコード用)'),\r\n }, async (args) => callApi(() => client.addDns(args)));\r\n\r\n server.tool(serverToolName(brand, 'update', 'dns'), 'DNSレコードを更新', {\r\n dns_id: z.string().describe('DNSレコードID'),\r\n domain: z.string().describe('対象ドメイン'),\r\n host: z.string().describe('ホスト名'),\r\n type: z.string().describe('レコードタイプ'),\r\n content: z.string().describe('レコード値'),\r\n ttl: z.number().optional().describe('TTL'),\r\n priority: z.number().optional().describe('優先度'),\r\n }, async ({ dns_id, ...data }) => callApi(() => client.updateDns(dns_id, data)));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'dns'), 'DNSレコードを削除', {\r\n dns_id: z.string().describe('DNSレコードID'),\r\n domain: z.string().describe('対象ドメイン'),\r\n }, async ({ dns_id, ...data }) => callApi(() => client.deleteDns(dns_id, data)));\r\n\r\n // PHP Version\r\n server.tool(serverToolName(brand, 'get', 'php_version'), 'PHPバージョン設定(利用可能バージョン・ドメイン別の現在バージョン)を取得', {},\r\n async () => callApi(() => client.getPhpVersion()));\r\n\r\n server.tool(serverToolName(brand, 'update', 'php_version'), 'ドメインのPHPバージョンを変更', {\r\n domain: z.string().describe('ドメイン名'),\r\n version: z.string().describe('PHPバージョン(例: 8.3.21)'),\r\n }, async ({ domain, ...data }) => callApi(() => client.updatePhpVersion(domain, data)));\r\n\r\n // Log\r\n server.tool(serverToolName(brand, 'get', 'access_log'), 'アクセスログを取得', {\r\n domain: z.string().describe('対象ドメイン'),\r\n lines: z.number().optional().describe('取得行数(末尾から)'),\r\n keyword: z.string().optional().describe('絞り込みキーワード'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n if (args.lines) params.lines = String(args.lines);\r\n if (args.keyword) params.keyword = args.keyword;\r\n return callApi(() => client.getAccessLog(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'get', 'error_log'), 'エラーログを取得', {\r\n domain: z.string().describe('対象ドメイン'),\r\n lines: z.number().optional().describe('取得行数(末尾から)'),\r\n keyword: z.string().optional().describe('絞り込みキーワード'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n if (args.lines) params.lines = String(args.lines);\r\n if (args.keyword) params.keyword = args.keyword;\r\n return callApi(() => client.getErrorLog(params));\r\n });\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerResourceMonitorTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'get', 'resource_monitor'), '指定日のCPU・メモリ・転送量時系列を取得', {\r\n date: z.string().describe('対象日(Y-m-d または Ymd。当日含む直近1か月)'),\r\n }, async ({ date }) => callApi(() => client.getResourceMonitor(date)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst PARTIAL_UPDATE_EMPTY_MESSAGE = '更新するフィールドを1つ以上指定してください';\r\n\r\nexport function registerWafTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'waf'), 'WAF設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listWaf(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'waf'), 'WAF設定を更新(指定した項目のみ)', {\r\n domain: z.string().describe('対象ドメイン'),\r\n xss_protection: z.boolean().optional().describe('XSS対策'),\r\n sql_injection_protection: z.boolean().optional().describe('SQL対策'),\r\n file_protection: z.boolean().optional().describe('ファイル対策'),\r\n mail_protection: z.boolean().optional().describe('メール対策'),\r\n command_protection: z.boolean().optional().describe('コマンド対策'),\r\n php_protection: z.boolean().optional().describe('PHP対策'),\r\n }, async (args) => {\r\n const { domain, ...fields } = args;\r\n const data: Record<string, unknown> = {};\r\n if (fields.xss_protection !== undefined) data.xss_protection = fields.xss_protection;\r\n if (fields.sql_injection_protection !== undefined) data.sql_injection_protection = fields.sql_injection_protection;\r\n if (fields.file_protection !== undefined) data.file_protection = fields.file_protection;\r\n if (fields.mail_protection !== undefined) data.mail_protection = fields.mail_protection;\r\n if (fields.command_protection !== undefined) data.command_protection = fields.command_protection;\r\n if (fields.php_protection !== undefined) data.php_protection = fields.php_protection;\r\n if (Object.keys(data).length === 0) {\r\n throw new Error(PARTIAL_UPDATE_EMPTY_MESSAGE);\r\n }\r\n return callApi(() => client.updateWaf(domain, data));\r\n });\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst PARTIAL_UPDATE_EMPTY_MESSAGE = '更新するフィールドを1つ以上指定してください';\r\n\r\nconst phpIniUpdateSchema = {\r\n domain: z.string().describe('対象ドメイン'),\r\n display_errors: z.string().optional().describe('エラー内容を画面に出力(On / Off)'),\r\n error_reporting: z.string().optional().describe('エラー出力レベル'),\r\n display_startup_errors: z.string().optional().describe('起動時エラーを表示(On / Off)'),\r\n 'session.auto_start': z.string().optional().describe('セッション自動開始(0 / 1)'),\r\n 'session.name': z.string().optional().describe('セッション名'),\r\n 'session.use_cookies': z.string().optional().describe('セッションIDにクッキーを使用(0 / 1)'),\r\n 'session.use_only_cookies': z.string().optional().describe('クッキーのみでセッションIDを保存(0 / 1)'),\r\n 'session.use_trans_sid': z.string().optional().describe('URLへセッションIDを自動設定(0 / 1)'),\r\n 'session.cookie_lifetime': z.string().optional().describe('クッキー有効期間(秒)'),\r\n 'session.cookie_path': z.string().optional().describe('クッキーを有効とするパス'),\r\n 'session.cookie_domain': z.string().optional().describe('クッキーを有効とするドメイン'),\r\n 'mbstring.language': z.string().optional().describe('デフォルト言語'),\r\n 'mbstring.internal_encoding': z.string().optional().describe('内部文字エンコーディング'),\r\n 'mbstring.http_input': z.string().optional().describe('HTTP入力文字エンコーディング変換'),\r\n 'mbstring.http_output': z.string().optional().describe('HTTP出力文字エンコーディング変換'),\r\n 'mbstring.encoding_translation': z.string().optional().describe('内部エンコーディングへの変換(On / Off)'),\r\n 'mbstring.detect_order': z.string().optional().describe('文字コード検出'),\r\n 'mbstring.substitute_character': z.string().optional().describe('無効文字の代替文字'),\r\n max_execution_time: z.string().optional().describe('最大実行時間(秒)'),\r\n max_input_time: z.string().optional().describe('入力パース最大時間(秒)'),\r\n memory_limit: z.string().optional().describe('最大メモリ'),\r\n post_max_size: z.string().optional().describe('POSTデータ最大サイズ'),\r\n upload_max_filesize: z.string().optional().describe('アップロードファイル最大サイズ'),\r\n register_globals: z.string().optional().describe('register_globals(On / Off)'),\r\n magic_quotes_gpc: z.string().optional().describe('magic_quotes_gpc(On / Off)'),\r\n safe_mode: z.string().optional().describe('safe_mode(On / Off)'),\r\n file_uploads: z.string().optional().describe('HTTPファイルアップロード(On / Off)'),\r\n allow_url_fopen: z.string().optional().describe('allow_url_fopen(On / Off)'),\r\n allow_url_include: z.string().optional().describe('allow_url_include(On / Off)'),\r\n};\r\n\r\nconst PHP_INI_API_KEYS = [\r\n 'display_errors',\r\n 'error_reporting',\r\n 'display_startup_errors',\r\n 'session.auto_start',\r\n 'session.name',\r\n 'session.use_cookies',\r\n 'session.use_only_cookies',\r\n 'session.use_trans_sid',\r\n 'session.cookie_lifetime',\r\n 'session.cookie_path',\r\n 'session.cookie_domain',\r\n 'mbstring.language',\r\n 'mbstring.internal_encoding',\r\n 'mbstring.http_input',\r\n 'mbstring.http_output',\r\n 'mbstring.encoding_translation',\r\n 'mbstring.detect_order',\r\n 'mbstring.substitute_character',\r\n 'max_execution_time',\r\n 'max_input_time',\r\n 'memory_limit',\r\n 'post_max_size',\r\n 'upload_max_filesize',\r\n 'register_globals',\r\n 'magic_quotes_gpc',\r\n 'safe_mode',\r\n 'file_uploads',\r\n 'allow_url_fopen',\r\n 'allow_url_include',\r\n] as const;\r\n\r\nexport function registerPhpIniTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'php_ini'), 'php.ini設定を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listPhpIni(params));\r\n });\r\n\r\n server.tool(\r\n serverToolName(brand, 'update', 'php_ini'),\r\n 'php.ini設定を更新(指定した項目のみ)',\r\n phpIniUpdateSchema,\r\n async (args) => {\r\n const { domain, ...fields } = args;\r\n const data: Record<string, unknown> = {};\r\n for (const key of PHP_INI_API_KEYS) {\r\n const value = fields[key as keyof typeof fields];\r\n if (value !== undefined) data[key] = value;\r\n }\r\n if (Object.keys(data).length === 0) {\r\n throw new Error(PARTIAL_UPDATE_EMPTY_MESSAGE);\r\n }\r\n return callApi(() => client.updatePhpIni(domain, data));\r\n },\r\n );\r\n\r\n server.tool(serverToolName(brand, 'reset', 'php_ini'), 'php.ini設定を初期値に戻す', {\r\n domain: z.string().describe('対象ドメイン'),\r\n }, async ({ domain }) => callApi(() => client.resetPhpIni(domain)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst enabledTargetSchema = z.object({\r\n enabled: z.boolean(),\r\n});\r\n\r\nconst foreignIpTargetSchema = z.object({\r\n enabled: z.boolean().optional(),\r\n allowed_ip_addresses: z.array(z.string()).optional(),\r\n});\r\n\r\nconst UPDATE_BLOCKS = [\r\n 'comment_restriction',\r\n 'login_attempt_limit',\r\n 'foreign_ip_restriction',\r\n 'ip_restriction',\r\n] as const;\r\n\r\nconst wordpressSecurityUpdateSchema = {\r\n domain: z.string().describe('対象ドメイン'),\r\n comment_restriction: z.object({\r\n bulk_post: enabledTargetSchema.optional(),\r\n foreign_post: enabledTargetSchema.optional(),\r\n }).optional().describe('コメント制限'),\r\n login_attempt_limit: z.object({\r\n enabled: z.boolean(),\r\n }).optional().describe('ログイン試行回数制限'),\r\n foreign_ip_restriction: z.object({\r\n dashboard: foreignIpTargetSchema.optional(),\r\n xml_rpc_api: foreignIpTargetSchema.optional(),\r\n rest_api: foreignIpTargetSchema.optional(),\r\n wlwmanifest: foreignIpTargetSchema.optional(),\r\n }).optional().describe('国外アクセス制限'),\r\n ip_restriction: z.object({\r\n enabled: z.boolean().optional(),\r\n allowed_ip_addresses: z.array(z.string()).optional(),\r\n }).optional().describe('IPアドレス制限(ダッシュボード)'),\r\n};\r\n\r\nfunction buildUpdateBody(args: Record<string, unknown>): Record<string, unknown> {\r\n const domain = args.domain;\r\n if (typeof domain !== 'string' || domain === '') {\r\n throw new Error('domain は必須です');\r\n }\r\n const data: Record<string, unknown> = { domain };\r\n for (const key of UPDATE_BLOCKS) {\r\n if (args[key] !== undefined) data[key] = args[key];\r\n }\r\n if (!UPDATE_BLOCKS.some((key) => key in data)) {\r\n throw new Error(\r\n 'comment_restriction、login_attempt_limit、foreign_ip_restriction、ip_restriction のいずれか1つ以上を指定してください',\r\n );\r\n }\r\n return data;\r\n}\r\n\r\nexport function registerWordPressSecurityTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'get', 'wordpress_security'), 'WordPressセキュリティ設定を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.getWordPressSecurity(params));\r\n });\r\n\r\n server.tool(\r\n serverToolName(brand, 'update', 'wordpress_security'),\r\n 'WordPressセキュリティ設定を更新(指定したブロックのみ)',\r\n wordpressSecurityUpdateSchema,\r\n async (args) => callApi(() => client.updateWordPressSecurity(buildUpdateBody(args))),\r\n );\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerXAcceleratorTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'x_accelerator'), 'Xアクセラレータ設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listXAccelerator(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'x_accelerator'), 'Xアクセラレータ設定を変更', {\r\n domain: z.string().describe('対象ドメイン'),\r\n xaccelerator_status: z.enum(['off', 'v1', 'v2']).describe('Xアクセラレータ設定(off / v1 / v2)'),\r\n }, async ({ domain, xaccelerator_status }) =>\r\n callApi(() => client.updateXAccelerator(domain, { xaccelerator_status })),\r\n );\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerServerCacheTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'server_cache'), 'サーバーキャッシュ設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listServerCache(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'server_cache'), 'サーバーキャッシュ設定を変更', {\r\n domain: z.string().describe('対象ドメイン'),\r\n server_cache_status: z.enum(['on', 'off']).describe('サーバーキャッシュ設定(on / off)'),\r\n }, async ({ domain, server_cache_status }) =>\r\n callApi(() => client.updateServerCache(domain, { server_cache_status })),\r\n );\r\n\r\n server.tool(serverToolName(brand, 'clear_cache', 'server_cache'), 'サーバーキャッシュの内容を削除(パージ)', {\r\n domain: z.string().describe('対象ドメイン'),\r\n }, async ({ domain }) => callApi(() => client.clearServerCache(domain)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerBrowserCacheTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'browser_cache'), 'ブラウザキャッシュ設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listBrowserCache(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'browser_cache'), 'ブラウザキャッシュ設定を変更', {\r\n domain: z.string().describe('対象ドメイン'),\r\n browser_cache_status: z.enum(['all', 'ignore-css-js', 'off']).describe('ブラウザキャッシュ設定(all / ignore-css-js / off)'),\r\n }, async ({ domain, browser_cache_status }) =>\r\n callApi(() => client.updateBrowserCache(domain, { browser_cache_status })),\r\n );\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerUrlRedirectTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'url_redirect'), 'サイト転送設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listUrlRedirect(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'url_redirect'), 'サイト転送設定を追加', {\r\n domain: z.string().describe('契約ドメイン'),\r\n from_host: z.string().describe('転送元ホスト(FQDN)'),\r\n from_path: z.string().optional().describe('転送元パス(省略時は /)'),\r\n redirect_to_url: z.string().describe('転送先URL(http または https)'),\r\n status_code: z.union([z.literal(301), z.literal(302)]).describe('転送時のステータスコード(301 / 302)'),\r\n }, async (args) => {\r\n const data: Record<string, unknown> = {\r\n domain: args.domain,\r\n from_host: args.from_host,\r\n redirect_to_url: args.redirect_to_url,\r\n status_code: args.status_code,\r\n };\r\n if (args.from_path !== undefined) data.from_path = args.from_path;\r\n return callApi(() => client.addUrlRedirect(data));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'delete', 'url_redirect'), 'サイト転送設定を削除', {\r\n redirect_id: z.string().describe('サイト転送設定のID'),\r\n }, async ({ redirect_id }) => callApi(() => client.deleteUrlRedirect(redirect_id)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerAccessDenyTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'access_deny'), 'アクセス拒否設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listAccessDeny(params));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'add', 'access_deny'), 'アクセス拒否設定を追加', {\r\n domain: z.string().describe('契約ドメイン'),\r\n ip_address: z.string().describe('拒否IPアドレス・ホスト(IPv4 / CIDR / 部分IP / ホスト名)'),\r\n memo: z.string().optional().describe('メモ(最大500文字)'),\r\n }, async (args) => {\r\n const data: Record<string, unknown> = {\r\n domain: args.domain,\r\n ip_address: args.ip_address,\r\n };\r\n if (args.memo !== undefined) data.memo = args.memo;\r\n return callApi(() => client.addAccessDeny(data));\r\n });\r\n\r\n server.tool(serverToolName(brand, 'update', 'access_deny'), 'アクセス拒否設定のメモを更新', {\r\n deny_id: z.string().describe('アクセス拒否設定のID'),\r\n memo: z.string().describe('メモ(空文字でクリア)'),\r\n }, async ({ deny_id, memo }) => callApi(() => client.updateAccessDeny(deny_id, { memo })));\r\n\r\n server.tool(serverToolName(brand, 'delete', 'access_deny'), 'アクセス拒否設定を削除', {\r\n deny_id: z.string().describe('アクセス拒否設定のID'),\r\n }, async ({ deny_id }) => callApi(() => client.deleteAccessDeny(deny_id)));\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst XPAGESPEED_KEYS = [\r\n 'xoptimize_images',\r\n 'lazyload_images',\r\n 'xoptimize_css',\r\n 'lazyload_css',\r\n 'xoptimize_javascript',\r\n 'lazyload_javascript',\r\n] as const;\r\n\r\nconst xPageSpeedUpdateSchema = {\r\n domain: z.string().describe('対象ドメイン'),\r\n xoptimize_images: z.boolean().optional().describe('画像最適化の有効/無効'),\r\n lazyload_images: z.boolean().optional().describe('画像遅延読み込みの有効/無効'),\r\n xoptimize_css: z.boolean().optional().describe('CSS最適化の有効/無効'),\r\n lazyload_css: z.boolean().optional().describe('CSS遅延読み込みの有効/無効'),\r\n xoptimize_javascript: z.boolean().optional().describe('JavaScript最適化の有効/無効'),\r\n lazyload_javascript: z.boolean().optional().describe('JavaScript遅延読み込みの有効/無効'),\r\n};\r\n\r\nfunction buildUpdateBody(args: Record<string, unknown>): Record<string, unknown> {\r\n const { domain, ...fields } = args;\r\n if (typeof domain !== 'string' || domain === '') {\r\n throw new Error('domain は必須です');\r\n }\r\n const data: Record<string, unknown> = {};\r\n for (const key of XPAGESPEED_KEYS) {\r\n if (fields[key] !== undefined) data[key] = fields[key];\r\n }\r\n if (Object.keys(data).length === 0) {\r\n throw new Error('更新するフィールドを1つ以上指定してください');\r\n }\r\n if (Object.keys(data).length > 1) {\r\n throw new Error('1リクエストで変更できるのは1つの最適化機能のみです');\r\n }\r\n return data;\r\n}\r\n\r\nexport function registerXPageSpeedTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'xpagespeed'), 'XPageSpeed設定一覧を取得', {\r\n domain: z.string().optional().describe('対象ドメインで絞り込み'),\r\n }, async (args) => {\r\n const params: Record<string, string> = {};\r\n if (args.domain) params.domain = args.domain;\r\n return callApi(() => client.listXPageSpeed(params));\r\n });\r\n\r\n server.tool(\r\n serverToolName(brand, 'update', 'xpagespeed'),\r\n 'XPageSpeedの最適化機能を変更(1リクエストで1機能のみ)',\r\n xPageSpeedUpdateSchema,\r\n async (args) => {\r\n const { domain, ...fields } = args;\r\n const data = buildUpdateBody({ domain, ...fields });\r\n return callApi(() => client.updateXPageSpeed(domain, data));\r\n },\r\n );\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nconst domainElementSchema = z.object({\r\n domain: z.string().describe('契約ドメイン'),\r\n elements: z.array(z.enum(['web', 'setting', 'mail'])).min(1).describe('対象種別(web / setting / mail)'),\r\n});\r\n\r\nexport function registerAutoBackupTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'auto_backup_backup_dates'), '選択可能なバックアップ日一覧を取得', {},\r\n async () => callApi(() => client.listAutoBackupBackupDates()));\r\n\r\n server.tool(serverToolName(brand, 'list', 'auto_backup'), '自動バックアップ申込履歴一覧を取得', {},\r\n async () => callApi(() => client.listAutoBackup()));\r\n\r\n server.tool(serverToolName(brand, 'get', 'auto_backup'), '自動バックアップ申込履歴の詳細を取得', {\r\n request_id: z.string().describe('申込ID(正の整数)'),\r\n }, async ({ request_id }) => callApi(() => client.getAutoBackup(request_id)));\r\n\r\n server.tool(serverToolName(brand, 'create', 'auto_backup'), '自動バックアップの取得または復元を申し込む', {\r\n backup_date: z.string().describe('対象バックアップ日(Y-m-d)'),\r\n operation_type: z.enum(['fetch', 'restore']).describe('処理種別(fetch: データ取得 / restore: 復元)'),\r\n scope: z.enum(['all', 'selected']).describe('処理方法(all: サーバー領域全体 / selected: 対象ドメイン・ディレクトリを指定)'),\r\n domain_elements: z.array(domainElementSchema).optional().describe('対象ドメイン・ディレクトリ(scope=selected のとき必須)'),\r\n }, async (args) => {\r\n const data: Record<string, unknown> = {\r\n backup_date: args.backup_date,\r\n operation_type: args.operation_type,\r\n scope: args.scope,\r\n };\r\n if (args.domain_elements !== undefined) {\r\n data.domain_elements = args.domain_elements;\r\n }\r\n return callApi(() => client.createAutoBackup(data));\r\n });\r\n}\r\n","import { z } from 'zod';\r\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\r\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\r\nimport { callApi, serverToolName } from '../../helper.js';\r\n\r\nexport function registerMysqlBackupTools(server: McpServer, client: ApiClient, brand: BrandConfig) {\r\n server.tool(serverToolName(brand, 'list', 'mysql_backup_databases'), 'MySQLバックアップの状態を取得', {},\r\n async () => callApi(() => client.listMysqlBackupDatabases()));\r\n\r\n server.tool(serverToolName(brand, 'list', 'mysql_backup'), 'MySQLバックアップ申込履歴一覧を取得', {},\r\n async () => callApi(() => client.listMysqlBackup()));\r\n\r\n server.tool(serverToolName(brand, 'get', 'mysql_backup'), 'MySQLバックアップ申込履歴詳細を取得', {\r\n request_id: z.string().describe('申込識別子(32文字の小文字16進数)'),\r\n }, async ({ request_id }) => callApi(() => client.getMysqlBackup(request_id)));\r\n\r\n server.tool(serverToolName(brand, 'create', 'mysql_backup'), 'MySQLバックアップの取得または復元を申し込む', {\r\n db_name: z.string().describe('データベース名'),\r\n backup_date: z.string().describe('対象バックアップ日(Y-m-d)'),\r\n operation_type: z.enum(['fetch', 'restore']).describe('処理種別(fetch: データ取得 / restore: 復元)'),\r\n }, async (args) => callApi(() => client.createMysqlBackup(args)));\r\n}\r\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\nimport { withDomainAcquisitionPermissionDiagnosis } from 'xnp-shared';\nimport {\n billingExecuteAnnotations,\n billingPreviewAnnotations,\n confirmBillingOperation,\n} from '../../billing-confirmation.js';\nimport { callApi, domainToolName } from '../../helper.js';\n\nconst domainName = z.string().min(1).max(255).describe('対象ドメイン名(国際化ドメインはPunycode)');\nconst dnsId = z.string().regex(/^[1-9]\\d*$/).describe('DNSレコードID(dns_id、正の整数)');\nconst dnsType = z.enum(['A', 'AAAA', 'CNAME', 'MX', 'TXT', 'NS', 'SRV'])\n .describe('DNSレコードタイプ');\nconst ttl = z.number().int().min(60).max(86400).describe('TTL(60~86400秒)');\nconst priority = z.number().int().min(0).max(999).describe('優先度(0~999)');\nconst expectedTotalPrice = z.number().int().nonnegative().describe('previewと一致する税込合計金額');\nconst idempotencyKey = z.string().regex(/^[A-Za-z0-9_-]{8,64}$/)\n .describe('Idempotency-Key(英数字・_・-、8~64文字)。却下された申請の再送は同じ値を使う。'\n + 'サーバーエラーや応答不明で終わった場合は、同じ値の再送が48時間409 DUPLICATE_REQUESTになるため、'\n + 'ドメイン詳細と請求履歴で状態を確認し、未実行のときだけ新しい値を使う。');\nconst years = z.number().int().min(1).max(5).describe('契約年数(1~5年)');\nconst currentExpiryDate = z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/)\n .describe('現在の有効期限(YYYY-MM-DD、二重更新防止用)');\nconst nameserverHostname = (maximumLength: number) => z.string()\n .min(1)\n .max(maximumLength)\n .regex(/^[A-Za-z0-9]([A-Za-z0-9.-]*[A-Za-z0-9])?$/);\nconst nameservers = (minimum: number, maximum: number, maximumLength: number) => z\n .array(nameserverHostname(maximumLength))\n .min(minimum)\n .max(maximum)\n .refine(\n (values) => new Set(values.map((value) => value.toLowerCase())).size === values.length,\n 'ネームサーバーを重複して指定できません',\n );\n\nconst whoisFields = z.object({\n organization_name: z.string().optional(),\n first_name: z.string().optional(),\n last_name: z.string().optional(),\n postal_code: z.string().optional(),\n state_province: z.string().optional(),\n city: z.string().optional(),\n address1: z.string().optional(),\n address2: z.string().optional(),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n fax: z.string().optional(),\n country: z.string().optional(),\n role: z.string().optional(),\n}).strict().describe('Whois登録者情報。代理公開OFF時は全13キーが必要');\n\nconst registrationInput = {\n domain: domainName,\n years: years.optional().default(1),\n expected_total_price: expectedTotalPrice,\n agree_to_terms: z.literal(true).describe(\n 'ドメイン取得の「サービス利用規約」および「個人情報の取り扱いについて」への明示同意',\n ),\n nameservers: nameservers(1, 6, 255).optional()\n .describe('取得時に設定するネームサーバー(1~6件)'),\n};\n\nconst transferInput = {\n domain: domainName,\n auth_code: z.string().min(1).max(255).describe('移管元で取得したAuthCode'),\n expected_total_price: expectedTotalPrice,\n agree_to_terms: z.literal(true).describe(\n 'ドメイン移管の「サービス利用規約」および「個人情報の取り扱いについて」への明示同意',\n ),\n};\n\nconst renewInput = {\n domain: domainName,\n years,\n current_expiry_date: currentExpiryDate,\n expected_total_price: expectedTotalPrice,\n};\n\nfunction description(text: string): string {\n return `${text}。ドメインレジストラで保有・管理するドメインが対象であり、レンタルサーバーのServer APIではありません`;\n}\n\nexport function registerDomainServiceTools(\n server: McpServer,\n client: ApiClient,\n brand: BrandConfig,\n options: { enableHighRiskExecute?: boolean } = {},\n): void {\n server.tool(\n domainToolName(brand, 'get', 'api_key_info'),\n description('APIキー情報とDomainサービスの権限・対象を取得'),\n {},\n async () => callApi(() => client.getMe()),\n );\n\n server.tool(\n domainToolName(brand, 'list', 'domains'),\n description('保有ドメインの一覧を取得'),\n {},\n async () => callApi(() => client.listDomains()),\n );\n\n server.tool(\n domainToolName(brand, 'get', 'domain'),\n description('保有ドメインの詳細・状態・有効期限を取得'),\n { domain: domainName },\n async ({ domain }) => callApi(() => client.getDomainDetail(domain)),\n );\n\n server.tool(\n domainToolName(brand, 'get', 'nameservers'),\n description('ネームサーバー設定を取得'),\n { domain: domainName },\n async ({ domain }) => callApi(() => client.getDomainNameservers(domain)),\n );\n\n server.tool(\n domainToolName(brand, 'update', 'nameservers'),\n description('ネームサーバーを1~13件で全置換'),\n {\n domain: domainName,\n nameservers: nameservers(1, 13, 253)\n .describe('置換後のネームサーバー(1~13件)'),\n },\n async ({ domain, nameservers }) => callApi(\n () => client.updateDomainNameservers(domain, { nameservers }),\n ),\n );\n\n server.tool(\n domainToolName(brand, 'list', 'dns'),\n description('レジストラ側DNSレコード一覧を取得'),\n { domain: domainName },\n async ({ domain }) => callApi(() => client.listDomainDns(domain)),\n );\n\n server.tool(\n domainToolName(brand, 'add', 'dns'),\n description('レジストラ側DNSレコードを追加'),\n {\n domain: domainName,\n type: dnsType,\n host: z.string().max(64).describe('ホスト名(apexは@)'),\n content: z.string().max(1024).describe('レコード値'),\n ttl: ttl.optional().default(3600),\n priority: priority.optional(),\n },\n async ({ domain, ...data }) => callApi(() => client.addDomainDns(domain, data)),\n );\n\n server.tool(\n domainToolName(brand, 'update', 'dns'),\n description('指定したレジストラ側DNSレコードを部分更新'),\n {\n domain: domainName,\n dns_id: dnsId,\n type: dnsType.optional(),\n host: z.string().max(64).optional().describe('ホスト名(apexは@)'),\n content: z.string().max(1024).optional().describe('レコード値'),\n ttl: ttl.optional(),\n priority: priority.optional(),\n },\n async ({ domain, dns_id, ...data }) => callApi(async () => {\n if (Object.keys(data).length === 0) {\n throw new Error('DNS更新項目を1つ以上指定してください。');\n }\n return client.updateDomainDns(domain, dns_id, data);\n }),\n );\n\n server.tool(\n domainToolName(brand, 'delete', 'dns'),\n description('指定したレジストラ側DNSレコードを削除(名前解決へ影響するため対象を確認して実行)'),\n {\n domain: domainName,\n dns_id: dnsId,\n confirmed: z.literal(true)\n .describe('対象レコードと名前解決への影響を利用者が確認済み'),\n },\n async ({ domain, dns_id, confirmed }) => callApi(async () => {\n if (!confirmed) throw new Error('confirmed=true is required.');\n return client.deleteDomainDns(domain, dns_id);\n }),\n );\n\n server.tool(\n domainToolName(brand, 'get', 'whois'),\n description('Whois登録者情報と代理公開設定を取得'),\n { domain: domainName },\n async ({ domain }) => callApi(() => client.getDomainWhois(domain)),\n );\n\n server.tool(\n domainToolName(brand, 'update', 'whois'),\n description('Whois登録者情報または代理公開設定を更新'),\n {\n domain: domainName,\n whois_privacy: z.boolean().optional().describe('Whois代理公開を有効にするか'),\n fields: whoisFields.optional(),\n },\n async ({ domain, whois_privacy, fields }) => callApi(async () => {\n if (whois_privacy === undefined && fields === undefined) {\n throw new Error('whois_privacy または fields のいずれかが必要です。');\n }\n const data: Record<string, unknown> = {};\n if (whois_privacy !== undefined) data.whois_privacy = whois_privacy;\n if (fields !== undefined) data.fields = fields;\n return client.updateDomainWhois(domain, data);\n }),\n );\n\n server.tool(\n domainToolName(brand, 'get', 'registrar_lock'),\n description('レジストラロック状態を取得'),\n { domain: domainName },\n async ({ domain }) => callApi(() => client.getDomainRegistrarLock(domain)),\n );\n\n server.tool(\n domainToolName(brand, 'update', 'registrar_lock'),\n description('レジストラロックを設定または解除'),\n {\n domain: domainName,\n locked: z.boolean().describe('trueでロック、falseで解除'),\n },\n async ({ domain, locked }) => callApi(\n () => client.updateDomainRegistrarLock(domain, { locked }),\n ),\n );\n\n server.tool(\n domainToolName(brand, 'check', 'domain'),\n description('ドメインの取得可否と見積価格を確認'),\n { domain: domainName },\n async ({ domain }) => callApi(\n () => withDomainAcquisitionPermissionDiagnosis(client, () => client.checkDomain(domain)),\n ),\n );\n\n server.tool(\n domainToolName(brand, 'get', 'pricing'),\n description('TLD別の税込価格一覧を取得'),\n {\n tld: z.string().optional()\n .describe('絞り込むTLD。複数はカンマ区切り(例: com,net,jp)'),\n },\n async ({ tld }) => callApi(\n () => withDomainAcquisitionPermissionDiagnosis(\n client,\n () => client.getDomainPricing(tld ? { tld } : undefined),\n ),\n ),\n );\n\n server.tool(\n domainToolName(brand, 'preview', 'registration'),\n description('課金されるドメイン新規取得をdry-runし、実申請前の金額を確認'),\n registrationInput,\n billingPreviewAnnotations,\n async ({ domain, years, expected_total_price, nameservers }) => callApi(\n () => withDomainAcquisitionPermissionDiagnosis(\n client,\n () => client.registerDomain({\n domain_name: domain,\n years,\n expected_total_price,\n agree_to_terms: true,\n dry_run: true,\n ...(nameservers ? { nameservers } : {}),\n }),\n ),\n ),\n );\n\n if (options.enableHighRiskExecute) {\n server.tool(\n domainToolName(brand, 'execute', 'registration'),\n description('明示承認後にドメイン新規取得を実申請(課金され原則取り消し不可)'),\n {\n ...registrationInput,\n idempotency_key: idempotencyKey,\n },\n billingExecuteAnnotations,\n async ({ domain, years, expected_total_price, nameservers, idempotency_key }) => callApi(\n async () => {\n const data = {\n domain_name: domain,\n years,\n expected_total_price,\n agree_to_terms: true,\n ...(nameservers ? { nameservers } : {}),\n };\n const preview = await withDomainAcquisitionPermissionDiagnosis(\n client,\n () => client.registerDomain({ ...data, dry_run: true }),\n ) as {\n total_price?: number;\n };\n const totalPrice = Number(preview.total_price);\n if (!Number.isFinite(totalPrice)) {\n throw new Error('dry-run結果から合計金額を取得できませんでした。');\n }\n if (totalPrice !== expected_total_price) {\n throw new Error(\n `価格不一致のため実申請を中止しました(見積 ${totalPrice}円 / 指定 ${expected_total_price}円)。`,\n );\n }\n await confirmBillingOperation(server, {\n operation: 'ドメイン新規取得',\n domain,\n totalPrice,\n brand,\n years,\n requireTermsAgreement: true,\n });\n return withDomainAcquisitionPermissionDiagnosis(\n client,\n () => client.registerDomain(data, idempotency_key),\n );\n },\n ),\n );\n }\n\n server.tool(\n domainToolName(brand, 'preview', 'transfer'),\n description('課金されるドメイン移管をdry-runし、実申請前の金額を確認'),\n transferInput,\n billingPreviewAnnotations,\n async ({ domain, auth_code, expected_total_price }) => callApi(\n () => withDomainAcquisitionPermissionDiagnosis(\n client,\n () => client.transferDomain(domain, {\n auth_code,\n expected_total_price,\n agree_to_terms: true,\n dry_run: true,\n }),\n ),\n ),\n );\n\n if (options.enableHighRiskExecute) {\n server.tool(\n domainToolName(brand, 'execute', 'transfer'),\n description('明示承認後にドメイン移管を実申請(課金され原則取り消し不可)'),\n {\n ...transferInput,\n idempotency_key: idempotencyKey,\n },\n billingExecuteAnnotations,\n async ({ domain, auth_code, expected_total_price, idempotency_key }) => callApi(\n async () => {\n const data = { auth_code, expected_total_price, agree_to_terms: true };\n const preview = await withDomainAcquisitionPermissionDiagnosis(\n client,\n () => client.transferDomain(domain, { ...data, dry_run: true }),\n ) as {\n total_price?: number;\n };\n const totalPrice = Number(preview.total_price);\n if (!Number.isFinite(totalPrice)) {\n throw new Error('dry-run結果から合計金額を取得できませんでした。');\n }\n if (totalPrice !== expected_total_price) {\n throw new Error(\n `価格不一致のため実申請を中止しました(見積 ${totalPrice}円 / 指定 ${expected_total_price}円)。`,\n );\n }\n await confirmBillingOperation(server, {\n operation: 'ドメイン移管',\n domain,\n totalPrice,\n brand,\n requireTermsAgreement: true,\n });\n return withDomainAcquisitionPermissionDiagnosis(\n client,\n () => client.transferDomain(domain, data, idempotency_key),\n );\n },\n ),\n );\n }\n\n server.tool(\n domainToolName(brand, 'preview', 'renew'),\n description('課金されるドメイン契約更新をdry-runし、実申請前の金額を確認'),\n renewInput,\n billingPreviewAnnotations,\n async ({ domain, years, current_expiry_date, expected_total_price }) => callApi(\n () => withDomainAcquisitionPermissionDiagnosis(\n client,\n () => client.renewDomain(domain, {\n years,\n current_expiry_date,\n expected_total_price,\n dry_run: true,\n }),\n ),\n ),\n );\n\n if (options.enableHighRiskExecute) {\n server.tool(\n domainToolName(brand, 'execute', 'renew'),\n description('明示承認後にドメイン契約更新を実申請(課金され原則取り消し不可)'),\n {\n ...renewInput,\n idempotency_key: idempotencyKey,\n },\n billingExecuteAnnotations,\n async ({\n domain,\n years,\n current_expiry_date,\n expected_total_price,\n idempotency_key,\n }) => callApi(\n async () => {\n const data = { years, current_expiry_date, expected_total_price };\n const preview = await withDomainAcquisitionPermissionDiagnosis(\n client,\n () => client.renewDomain(domain, { ...data, dry_run: true }),\n ) as {\n total_price?: number;\n };\n const totalPrice = Number(preview.total_price);\n if (!Number.isFinite(totalPrice)) {\n throw new Error('dry-run結果から合計金額を取得できませんでした。');\n }\n if (totalPrice !== expected_total_price) {\n throw new Error(\n `価格不一致のため実申請を中止しました(見積 ${totalPrice}円 / 指定 ${expected_total_price}円)。`,\n );\n }\n await confirmBillingOperation(server, {\n operation: 'ドメイン契約更新',\n domain,\n totalPrice,\n brand,\n years,\n });\n return withDomainAcquisitionPermissionDiagnosis(\n client,\n () => client.renewDomain(domain, data, idempotency_key),\n );\n },\n ),\n );\n }\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BrandConfig } from 'xnp-shared';\nimport { domainLegalNoticeLines } from 'xnp-shared';\n\nexport type BillingConfirmationInput = {\n operation: string;\n domain: string;\n totalPrice: number;\n brand: BrandConfig;\n years?: number;\n requireTermsAgreement?: boolean;\n};\n\nfunction supportsFormElicitation(server: McpServer): boolean {\n const elicitation = server.server.getClientCapabilities()?.elicitation as\n | { form?: unknown }\n | undefined;\n return elicitation != null && elicitation.form != null;\n}\n\n/**\n * Fail-closed billing confirmation via MCP form elicitation.\n * Model-supplied confirmed/agree flags are intentionally ignored.\n */\nexport async function confirmBillingOperation(\n server: McpServer,\n input: BillingConfirmationInput,\n): Promise<void> {\n if (!supportsFormElicitation(server)) {\n throw new Error(\n '課金操作には MCP form elicitation 対応クライアント (Codex / Claude Code / Cursor の対話モードなど)が必要です。非対応クライアントでは実行できません。',\n );\n }\n\n const yearsLine = input.years == null ? '' : '\\n- 契約年数: ' + input.years + '年';\n const termsLine = input.requireTermsAgreement\n ? '\\n- 「サービス利用規約」および「個人情報の取り扱いについて」への同意が必要です'\n : '';\n const message = [\n '課金を伴う操作の最終確認です。',\n `- 操作: ${input.operation}`,\n `- 対象ドメイン: ${input.domain}`,\n yearsLine,\n `- 税込合計: ${input.totalPrice}円`,\n ...domainLegalNoticeLines(input.brand),\n '- 申請後は課金され、原則取り消しできません',\n termsLine,\n '',\n '内容を確認し、承認する場合のみ true を選択してください。',\n ].filter((line) => line !== '').join('\\n');\n\n const properties: Record<string, { type: 'boolean'; title: string; description: string }> = {\n confirm_purchase: {\n type: 'boolean',\n title: '課金を承認する',\n description: `${input.domain} / ${input.totalPrice}円 / ${input.operation}`,\n },\n };\n const required = ['confirm_purchase'];\n if (input.requireTermsAgreement) {\n properties.agree_to_terms = {\n type: 'boolean',\n title: '「サービス利用規約」「個人情報の取り扱いについて」に同意する',\n description: 'ドメイン取得・移管の「サービス利用規約」および「個人情報の取り扱いについて」に同意します',\n };\n required.push('agree_to_terms');\n }\n\n let result;\n try {\n result = await server.server.elicitInput({\n mode: 'form',\n message,\n requestedSchema: {\n type: 'object',\n properties,\n required,\n },\n });\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new Error(`課金確認(elicitation)に失敗したため実申請を中止しました: ${detail}`);\n }\n\n if (result.action === 'decline' || result.action === 'cancel') {\n throw new Error('BILLING_CONFIRMATION_DECLINED: 利用者が課金確認を拒否またはキャンセルしたため、実申請を中止しました。');\n }\n if (result.action !== 'accept' || result.content == null || typeof result.content !== 'object') {\n throw new Error('BILLING_CONFIRMATION_INVALID: 課金確認の応答が不正なため、実申請を中止しました。');\n }\n\n const content = result.content as Record<string, unknown>;\n if (content.confirm_purchase !== true) {\n throw new Error('BILLING_CONFIRMATION_NOT_APPROVED: 課金承認が確認できなかったため、実申請を中止しました。');\n }\n if (input.requireTermsAgreement && content.agree_to_terms !== true) {\n throw new Error(\n 'BILLING_TERMS_NOT_APPROVED: 「サービス利用規約」および'\n + '「個人情報の取り扱いについて」への同意が確認できなかったため、実申請を中止しました。',\n );\n }\n}\n\nexport const billingPreviewAnnotations = {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n} as const;\n\nexport const billingExecuteAnnotations = {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: true,\n} as const;\n\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ApiClient, BrandConfig } from \"xnp-shared\";\nimport { callApi, wphostingToolName } from \"../../helper.js\";\n\ntype Shape = Record<string, z.ZodTypeAny>;\ntype Args = Record<string, unknown>;\ntype AsyncApiMethod = {\n [K in keyof ApiClient]: ApiClient[K] extends (\n ...args: never[]\n ) => Promise<unknown>\n ? K\n : never;\n}[keyof ApiClient];\ntype ToolServer = {\n tool(\n name: string,\n description: string,\n schema: Shape,\n handler: (args: Args) => ReturnType<typeof callApi>\n ): void;\n};\n\nconst contractId = z\n .string()\n .regex(/^WP-[A-Za-z0-9]+$/)\n .max(64)\n .describe(\"XServer for WordPressの契約ID(contract_id)\");\nconst servername = z\n .string()\n .min(1)\n .max(255)\n .describe(\"契約内の対象サイト環境servername(本番またはステージング)\");\nconst domain = z.string().min(1).max(255).describe(\"対象ドメイン名\");\nconst positiveId = (label: string) =>\n z\n .string()\n .regex(/^[1-9]\\d*$/)\n .describe(label);\nconst opaqueId = (label: string) =>\n z\n .string()\n .regex(/^[A-Za-z0-9_-]+$/)\n .max(255)\n .describe(label);\nconst slug = (label: string) => z.string().min(1).max(255).describe(label);\nconst idempotencyKey = z\n .string()\n .regex(/^[A-Za-z0-9_-]{8,64}$/)\n .describe(\"再送時も同じ値を使うIdempotency-Key(英数字・_・-、8~64文字)\");\nconst confirmed = z\n .literal(true)\n .describe(\n \"対象、消失・上書き・連動影響を確認先で確認し、利用者が実行を明示承認済み\"\n );\nconst dnsType = z.enum([\"A\", \"AAAA\", \"CNAME\", \"MX\", \"TXT\", \"SRV\"]);\nconst dnsTtl = z.number().int().min(60).max(86400);\nconst dnsPriority = z.number().int().min(0).max(65535);\nconst site = { contract_id: contractId, servername };\nconst cronFields = {\n minute: z.string().min(1).max(64),\n hour: z.string().min(1).max(64),\n day: z.string().min(1).max(64),\n month: z.string().min(1).max(64),\n weekday: z.string().min(1).max(64),\n command: z.string().min(1).max(5000),\n comment: z.string().max(255).optional(),\n};\nconst wpUserOptionalFields = {\n user_email: z.string().email().max(100).optional(),\n user_pass: z.string().min(7).max(64).optional(),\n role: z.string().min(1).max(64).optional(),\n display_name: z.string().max(255).optional(),\n first_name: z.string().max(255).optional(),\n last_name: z.string().max(255).optional(),\n user_url: z.string().url().max(255).optional(),\n};\n\nfunction description(text: string): string {\n return `${text}。XServer for WordPress契約が対象です。レンタルサーバーServer APIのWordPress・DNS・Cron・SSH操作ではありません`;\n}\n\nfunction body(args: Args, excluded: string[]): Args {\n return Object.fromEntries(\n Object.entries(args).filter(([key]) => !excluded.includes(key))\n );\n}\n\nfunction requireUpdate(\n data: Args,\n message = \"更新項目を1つ以上指定してください。\"\n): void {\n if (Object.keys(data).length === 0) throw new Error(message);\n}\n\nexport function registerWphostingTools(\n server: McpServer,\n client: ApiClient,\n brand: BrandConfig\n): void {\n if (brand.brand !== \"xserver\") {\n throw new Error(\n `--services=wphosting is not supported for brand \"${brand.brand}\"; use XServer.`\n );\n }\n\n const tools = server as unknown as ToolServer;\n const invoke = (method: AsyncApiMethod, args: unknown[] = []) => {\n const fn = client[method];\n if (typeof fn !== \"function\")\n throw new Error(`ApiClient.${method} is not available.`);\n return (fn as (...values: unknown[]) => Promise<unknown>).apply(\n client,\n args\n );\n };\n const register = (\n verb: string,\n resource: string,\n text: string,\n schema: Shape,\n method: AsyncApiMethod,\n toArgs: (args: Args) => unknown[]\n ) =>\n tools.tool(\n wphostingToolName(brand, verb, resource),\n description(text),\n schema,\n async (args) => callApi(() => invoke(method, toArgs(args)))\n );\n\n register(\n \"get\",\n \"api_key_info\",\n \"APIキー情報とWPhosting権限・対象契約を取得\",\n {},\n \"getMe\",\n () => []\n );\n register(\n \"list\",\n \"sites\",\n \"契約内の本番・ステージングサイト一覧と処理statusを取得\",\n { contract_id: contractId },\n \"listWphostingSites\",\n (a) => [a.contract_id]\n );\n register(\n \"get\",\n \"site\",\n \"サイト詳細と非同期サイト処理のstatusを取得\",\n site,\n \"getWphostingSite\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"get\",\n \"usage\",\n \"契約上限、使用量、サイト別内訳を取得\",\n { contract_id: contractId },\n \"getWphostingUsage\",\n (a) => [a.contract_id]\n );\n register(\n \"create\",\n \"site\",\n \"サイト作成を受け付ける(確認先: get_wphosting_siteのstatus)\",\n {\n contract_id: contractId,\n wp_sitename: z.string().min(1).max(255),\n wp_username: z\n .string()\n .min(1)\n .max(255)\n .regex(/^[0-9A-Za-z _\\-.@]+$/),\n wp_password: z\n .string()\n .min(7)\n .max(64)\n .regex(/^[A-Za-z0-9!#$%=~^|:_\\[\\]().+\\-*\\/@&<>`;?,]+$/)\n .refine((value) => /[A-Za-z]/.test(value) && /[^A-Za-z]/.test(value), {\n message: \"半角英字と数字または記号をそれぞれ1文字以上含めてください\",\n }),\n wp_mailaddress: z.string().email().max(100),\n disk_limit_gb: z.number().int().min(10),\n vcpu_limit: z.number().int().positive(),\n memory_limit_gb: z.number().int().positive(),\n wp_theme: z.enum([\"default\", \"cocoon-master\", \"lightning\"]).optional(),\n server_id: z\n .string()\n .regex(/^[a-z][a-z0-9]{0,11}$/)\n .optional(),\n security_auto_optimize: z.boolean().optional(),\n memo: z.string().max(255).optional(),\n idempotency_key: idempotencyKey.optional(),\n },\n \"createWphostingSite\",\n (a) => {\n if (a.wp_password === a.wp_username) {\n throw new Error(\n \"wp_passwordはwp_usernameと異なる文字列を指定してください。\"\n );\n }\n return [\n a.contract_id,\n body(a, [\"contract_id\", \"idempotency_key\"]),\n a.idempotency_key,\n ];\n }\n );\n\n tools.tool(\n wphostingToolName(brand, \"preview\", \"site_deletion\"),\n description(\n \"サイト削除前にGETで対象と影響を確認(本番サイトなら紐づくステージングも連動削除。確認後はexecute_wphosting_site_deletion)\"\n ),\n site,\n async (a) =>\n callApi(async () => ({\n target: await invoke(\"getWphostingSite\", [a.contract_id, a.servername]),\n impact:\n \"指定サイトを削除します。本番サイトの場合は紐づくステージングサイトも連動削除され、一覧から除外されるまで処理中です。\",\n confirmation_tool: wphostingToolName(brand, \"execute\", \"site_deletion\"),\n confirmation_destination:\n \"list_wphosting_sitesで対象と連動削除対象を再確認してください。\",\n }))\n );\n register(\n \"execute\",\n \"site_deletion\",\n \"preview結果の明示承認後にサイト削除を受け付ける(確認先: list_wphosting_sitesから対象が除外)\",\n { ...site, confirmed, idempotency_key: idempotencyKey.optional() },\n \"deleteWphostingSite\",\n (a) => [a.contract_id, a.servername, a.idempotency_key]\n );\n register(\n \"create\",\n \"staging\",\n \"本番サイトのステージング作成を受け付ける(確認先: 返却servernameのget_wphosting_site status)\",\n {\n ...site,\n disk_limit_gb: z.number().int().min(10),\n vcpu_limit: z.number().int().positive(),\n memory_limit_gb: z.number().int().positive(),\n server_id: z.string().min(1).max(12).optional(),\n security_auto_optimize: z.boolean().optional(),\n idempotency_key: idempotencyKey.optional(),\n },\n \"createWphostingStaging\",\n (a) => [\n a.contract_id,\n a.servername,\n body(a, [\"contract_id\", \"servername\", \"idempotency_key\"]),\n a.idempotency_key,\n ]\n );\n\n register(\n \"list\",\n \"backups\",\n \"手動バックアップ一覧と作成statusを取得\",\n site,\n \"listWphostingBackups\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"create\",\n \"backup\",\n \"手動バックアップ作成を受け付ける(確認先: list_wphosting_backupsのstatus)\",\n {\n ...site,\n memo: z.string().max(255).optional(),\n idempotency_key: idempotencyKey.optional(),\n },\n \"createWphostingBackup\",\n (a) => [\n a.contract_id,\n a.servername,\n body(a, [\"contract_id\", \"servername\", \"idempotency_key\"]),\n a.idempotency_key,\n ]\n );\n tools.tool(\n wphostingToolName(brand, \"preview\", \"backup_restore\"),\n description(\n \"バックアップ復元前にGETで対象と上書き影響を確認(確認後はexecute_wphosting_backup_restore)\"\n ),\n { ...site, backup_id: opaqueId(\"復元するバックアップID\") },\n async (a) =>\n callApi(async () => ({\n backups: await invoke(\"listWphostingBackups\", [\n a.contract_id,\n a.servername,\n ]),\n target_backup_id: a.backup_id,\n impact:\n \"指定バックアップの内容で現在のサイト内容を上書きします。開始後は取り消せません。\",\n confirmation_tool: wphostingToolName(\n brand,\n \"execute\",\n \"backup_restore\"\n ),\n confirmation_destination:\n \"list_wphosting_backupsで対象を確認し、実行後はlist_wphosting_backup_restore_historyで成否を確認してください。\",\n }))\n );\n register(\n \"execute\",\n \"backup_restore\",\n \"preview結果の明示承認後に復元を受け付ける(確認先: list_wphosting_backup_restore_historyのstatus)\",\n {\n ...site,\n backup_id: opaqueId(\"復元するバックアップID\"),\n confirmed,\n idempotency_key: idempotencyKey.optional(),\n },\n \"restoreWphostingBackup\",\n (a) => [a.contract_id, a.servername, a.backup_id, a.idempotency_key]\n );\n register(\n \"list\",\n \"backup_restore_history\",\n \"手動・自動バックアップ復元の履歴とstatusを取得\",\n site,\n \"listWphostingBackupRestoreHistory\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"delete\",\n \"backup\",\n \"バックアップを削除(確認先: list_wphosting_backups。削除後は復元不可)\",\n { ...site, backup_id: opaqueId(\"削除するバックアップID\"), confirmed },\n \"deleteWphostingBackup\",\n (a) => [a.contract_id, a.servername, a.backup_id]\n );\n\n register(\n \"get\",\n \"wordpress\",\n \"WordPress本体のバージョンと自動更新設定を取得\",\n site,\n \"getWphostingWordPress\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"update\",\n \"wordpress\",\n \"WordPress本体の自動更新設定を変更\",\n { ...site, auto_update_scope: z.enum([\"none\", \"minor\", \"all\"]) },\n \"updateWphostingWordPress\",\n (a) => [\n a.contract_id,\n a.servername,\n { auto_update_scope: a.auto_update_scope },\n ]\n );\n register(\n \"upgrade\",\n \"wordpress\",\n \"WordPress本体を同期更新\",\n site,\n \"upgradeWphostingWordPress\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"get\",\n \"maintenance_mode\",\n \"メンテナンスモード設定を取得\",\n site,\n \"getWphostingMaintenanceMode\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"update\",\n \"maintenance_mode\",\n \"メンテナンスモードを変更\",\n { ...site, enabled: z.boolean() },\n \"updateWphostingMaintenanceMode\",\n (a) => [a.contract_id, a.servername, { enabled: a.enabled }]\n );\n\n register(\n \"list\",\n \"plugins\",\n \"通常プラグイン一覧を取得(drop-in/must-useを除く)\",\n site,\n \"listWphostingPlugins\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"install\",\n \"plugin\",\n \"公式リポジトリのプラグインslugをインストール\",\n {\n ...site,\n plugin: slug(\"プラグインslug\"),\n activate: z.boolean().optional(),\n },\n \"installWphostingPlugin\",\n (a) => [\n a.contract_id,\n a.servername,\n {\n plugin: a.plugin,\n ...(a.activate === undefined ? {} : { activate: a.activate }),\n },\n ]\n );\n register(\n \"update\",\n \"plugin\",\n \"プラグインの有効状態または自動更新設定を部分更新\",\n {\n ...site,\n plugin: slug(\"プラグインslug\"),\n status: z.enum([\"active\", \"inactive\"]).optional(),\n auto_update: z.boolean().optional(),\n },\n \"updateWphostingPlugin\",\n (a) => {\n const data = body(a, [\"contract_id\", \"servername\", \"plugin\"]);\n requireUpdate(data);\n return [a.contract_id, a.servername, a.plugin, data];\n }\n );\n register(\n \"upgrade\",\n \"plugin\",\n \"プラグインを同期更新\",\n { ...site, plugin: slug(\"プラグインslug\") },\n \"upgradeWphostingPlugin\",\n (a) => [a.contract_id, a.servername, a.plugin]\n );\n register(\n \"delete\",\n \"plugin\",\n \"プラグインを削除(確認先: list_wphosting_plugins)\",\n { ...site, plugin: slug(\"削除するプラグインslug\"), confirmed },\n \"deleteWphostingPlugin\",\n (a) => [a.contract_id, a.servername, a.plugin]\n );\n\n register(\n \"list\",\n \"themes\",\n \"テーマ一覧を取得\",\n site,\n \"listWphostingThemes\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"install\",\n \"theme\",\n \"公式リポジトリのテーマslugをインストール\",\n { ...site, theme: slug(\"テーマslug\"), activate: z.boolean().optional() },\n \"installWphostingTheme\",\n (a) => [\n a.contract_id,\n a.servername,\n {\n theme: a.theme,\n ...(a.activate === undefined ? {} : { activate: a.activate }),\n },\n ]\n );\n register(\n \"update\",\n \"theme\",\n \"テーマのactive切替または自動更新設定を部分更新\",\n {\n ...site,\n theme: slug(\"テーマslug\"),\n status: z.literal(\"active\").optional(),\n auto_update: z.boolean().optional(),\n },\n \"updateWphostingTheme\",\n (a) => {\n const data = body(a, [\"contract_id\", \"servername\", \"theme\"]);\n requireUpdate(data);\n return [a.contract_id, a.servername, a.theme, data];\n }\n );\n register(\n \"upgrade\",\n \"theme\",\n \"テーマを同期更新\",\n { ...site, theme: slug(\"テーマslug\") },\n \"upgradeWphostingTheme\",\n (a) => [a.contract_id, a.servername, a.theme]\n );\n register(\n \"delete\",\n \"theme\",\n \"テーマを削除(確認先: list_wphosting_themes。activeテーマは削除不可)\",\n { ...site, theme: slug(\"削除するテーマslug\"), confirmed },\n \"deleteWphostingTheme\",\n (a) => [a.contract_id, a.servername, a.theme]\n );\n\n register(\n \"list\",\n \"domains\",\n \"サイトの初期・追加ドメイン一覧とWeb/SSL/DNS状態を取得\",\n site,\n \"listWphostingDomains\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"add\",\n \"domain\",\n \"サイトへドメインを追加(必要時は所有者確認TXT情報を返す)\",\n { ...site, domain },\n \"addWphostingDomain\",\n (a) => [a.contract_id, a.servername, { domain: a.domain }]\n );\n register(\n \"verify\",\n \"domain\",\n \"追加ドメインのDNS所有者確認を実行\",\n { ...site, domain },\n \"verifyWphostingDomain\",\n (a) => [a.contract_id, a.servername, a.domain]\n );\n register(\n \"delete\",\n \"domain\",\n \"サイトのドメイン設定を削除(確認先: list_wphosting_domains。サイトURL使用中は削除不可)\",\n { ...site, domain, confirmed },\n \"deleteWphostingDomain\",\n (a) => [a.contract_id, a.servername, a.domain]\n );\n register(\n \"update\",\n \"site_url\",\n \"サイトのプライマリドメインを変更\",\n { ...site, domain, auto_redirect: z.boolean().optional() },\n \"updateWphostingSiteUrl\",\n (a) => [\n a.contract_id,\n a.servername,\n {\n domain: a.domain,\n ...(a.auto_redirect === undefined\n ? {}\n : { auto_redirect: a.auto_redirect }),\n },\n ]\n );\n\n register(\n \"list\",\n \"dns_records\",\n \"サイト追加ドメインのDNSレコード一覧を取得\",\n { ...site, domain },\n \"listWphostingDnsRecords\",\n (a) => [a.contract_id, a.servername, a.domain]\n );\n register(\n \"add\",\n \"dns_record\",\n \"サイト追加ドメインへDNSレコードを追加\",\n {\n ...site,\n domain,\n host: z.string().max(255),\n type: dnsType,\n content: z.string().max(1024),\n ttl: dnsTtl.optional().default(3600),\n priority: dnsPriority.optional(),\n },\n \"addWphostingDnsRecord\",\n (a) => [\n a.contract_id,\n a.servername,\n a.domain,\n body(a, [\"contract_id\", \"servername\", \"domain\"]),\n ]\n );\n register(\n \"update\",\n \"dns_record\",\n \"サイト追加ドメインのDNSレコードを部分更新\",\n {\n ...site,\n domain,\n dns_id: positiveId(\"DNSレコードID\"),\n host: z.string().max(255).optional(),\n type: dnsType.optional(),\n content: z.string().max(1024).optional(),\n ttl: dnsTtl.optional(),\n priority: dnsPriority.optional(),\n },\n \"updateWphostingDnsRecord\",\n (a) => {\n const data = body(a, [\"contract_id\", \"servername\", \"domain\", \"dns_id\"]);\n requireUpdate(data);\n return [a.contract_id, a.servername, a.domain, a.dns_id, data];\n }\n );\n register(\n \"delete\",\n \"dns_record\",\n \"サイト追加ドメインのDNSレコードを削除(確認先: list_wphosting_dns_records)\",\n { ...site, domain, dns_id: positiveId(\"DNSレコードID\"), confirmed },\n \"deleteWphostingDnsRecord\",\n (a) => [a.contract_id, a.servername, a.domain, a.dns_id]\n );\n\n register(\n \"get\",\n \"php_version\",\n \"サイトのPHPバージョンを取得\",\n site,\n \"getWphostingPhpVersion\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"update\",\n \"php_version\",\n \"サイトのPHPバージョンを変更\",\n { ...site, version: z.string().min(1).max(16) },\n \"updateWphostingPhpVersion\",\n (a) => [a.contract_id, a.servername, { version: a.version }]\n );\n register(\n \"get\",\n \"access_log\",\n \"サイトのアクセスログを取得\",\n {\n ...site,\n date: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/)\n .optional(),\n keyword: z.string().max(255).optional(),\n line_number: z.number().int().min(1).max(50000).optional(),\n },\n \"getWphostingAccessLog\",\n (a) => [a.contract_id, a.servername, body(a, [\"contract_id\", \"servername\"])]\n );\n register(\n \"get\",\n \"error_log\",\n \"サイトのエラーログを取得\",\n {\n ...site,\n keyword: z.string().max(255).optional(),\n line_number: z.number().int().min(1).max(50000).optional(),\n },\n \"getWphostingErrorLog\",\n (a) => [a.contract_id, a.servername, body(a, [\"contract_id\", \"servername\"])]\n );\n\n register(\n \"list\",\n \"cron\",\n \"サイトに解決されたCron設定一覧を取得\",\n site,\n \"listWphostingCron\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"add\",\n \"cron\",\n \"サイトに解決されたCronジョブを追加\",\n { ...site, ...cronFields },\n \"addWphostingCron\",\n (a) => [a.contract_id, a.servername, body(a, [\"contract_id\", \"servername\"])]\n );\n register(\n \"update\",\n \"cron\",\n \"サイトに解決されたCronジョブを部分更新\",\n {\n ...site,\n cron_id: z.string().min(1).max(255),\n minute: cronFields.minute.optional(),\n hour: cronFields.hour.optional(),\n day: cronFields.day.optional(),\n month: cronFields.month.optional(),\n weekday: cronFields.weekday.optional(),\n command: cronFields.command.optional(),\n comment: cronFields.comment,\n enabled: z.boolean().optional(),\n },\n \"updateWphostingCron\",\n (a) => {\n const data = body(a, [\"contract_id\", \"servername\", \"cron_id\"]);\n requireUpdate(data);\n return [a.contract_id, a.servername, a.cron_id, data];\n }\n );\n register(\n \"delete\",\n \"cron\",\n \"サイトに解決されたCronジョブを削除(確認先: list_wphosting_cron)\",\n { ...site, cron_id: z.string().min(1).max(255), confirmed },\n \"deleteWphostingCron\",\n (a) => [a.contract_id, a.servername, a.cron_id]\n );\n\n register(\n \"get\",\n \"ssh\",\n \"サイトに解決されたSSH設定と接続情報を取得\",\n site,\n \"getWphostingSsh\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"update\",\n \"ssh\",\n \"サイトに解決されたSSH有効状態または国外アクセス制限を変更\",\n {\n ...site,\n ssh_enabled: z.boolean().optional(),\n abroad_access_restriction: z.boolean().optional(),\n },\n \"updateWphostingSsh\",\n (a) => {\n const data = body(a, [\"contract_id\", \"servername\"]);\n requireUpdate(data);\n return [a.contract_id, a.servername, data];\n }\n );\n register(\n \"list\",\n \"ssh_keys\",\n \"サイトに解決されたSSH公開鍵一覧を取得\",\n site,\n \"listWphostingSshKeys\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"add\",\n \"ssh_key\",\n \"SSH公開鍵を登録または鍵ペアを生成(初回active鍵ならSSHも有効化)\",\n {\n ...site,\n label: z.string().min(1).max(500),\n public_key: z.string().min(1).optional(),\n generate: z.boolean().optional(),\n passphrase: z.string().min(6).max(32).optional(),\n },\n \"addWphostingSshKey\",\n (a) => {\n if (a.generate !== true && a.public_key === undefined) {\n throw new Error(\n \"public_key または generate=true のいずれかが必要です。\"\n );\n }\n if (a.generate === true && a.public_key !== undefined) {\n throw new Error(\"generate=trueとpublic_keyは同時に指定できません。\");\n }\n if (a.generate !== true && a.passphrase !== undefined) {\n throw new Error(\"passphraseはgenerate=trueの場合だけ指定できます。\");\n }\n return [\n a.contract_id,\n a.servername,\n body(a, [\"contract_id\", \"servername\"]),\n ];\n }\n );\n register(\n \"update\",\n \"ssh_key\",\n \"SSH公開鍵のラベルまたはstatusを部分更新\",\n {\n ...site,\n key_id: positiveId(\"SSH公開鍵ID\"),\n label: z.string().min(1).max(500).optional(),\n status: z.enum([\"on\", \"off\"]).optional(),\n },\n \"updateWphostingSshKey\",\n (a) => {\n const data = body(a, [\"contract_id\", \"servername\", \"key_id\"]);\n requireUpdate(data);\n return [a.contract_id, a.servername, a.key_id, data];\n }\n );\n register(\n \"delete\",\n \"ssh_key\",\n \"SSH公開鍵を削除(確認先: list_wphosting_ssh_keys)\",\n { ...site, key_id: positiveId(\"SSH公開鍵ID\"), confirmed },\n \"deleteWphostingSshKey\",\n (a) => [a.contract_id, a.servername, a.key_id]\n );\n\n register(\n \"list\",\n \"wp_user_roles\",\n \"WordPressユーザー権限グループ一覧を取得\",\n site,\n \"listWphostingWpUserRoles\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"list\",\n \"wp_users\",\n \"WordPressユーザー一覧を検索・並べ替えて取得\",\n {\n ...site,\n search: z.string().max(255).optional(),\n orderby: z\n .enum([\n \"ID\",\n \"user_login\",\n \"display_name\",\n \"user_email\",\n \"user_registered\",\n ])\n .optional(),\n order: z.enum([\"asc\", \"desc\"]).optional(),\n },\n \"listWphostingWpUsers\",\n (a) => [a.contract_id, a.servername, body(a, [\"contract_id\", \"servername\"])]\n );\n register(\n \"create\",\n \"wp_user\",\n \"WordPressユーザーを作成\",\n {\n ...site,\n user_login: z.string().min(1).max(60),\n user_email: z.string().email().max(100),\n user_pass: z.string().min(7).max(64),\n role: z.string().min(1).max(64),\n display_name: z.string().max(255).optional(),\n first_name: z.string().max(255).optional(),\n last_name: z.string().max(255).optional(),\n user_url: z.string().url().max(255).optional(),\n send_email: z.boolean().optional(),\n },\n \"createWphostingWpUser\",\n (a) => [a.contract_id, a.servername, body(a, [\"contract_id\", \"servername\"])]\n );\n register(\n \"get\",\n \"wp_user\",\n \"WordPressユーザー詳細を取得\",\n { ...site, user_id: positiveId(\"WordPressユーザーID\") },\n \"getWphostingWpUser\",\n (a) => [a.contract_id, a.servername, a.user_id]\n );\n register(\n \"update\",\n \"wp_user\",\n \"WordPressユーザーを部分更新\",\n {\n ...site,\n user_id: positiveId(\"WordPressユーザーID\"),\n ...wpUserOptionalFields,\n },\n \"updateWphostingWpUser\",\n (a) => {\n const data = body(a, [\"contract_id\", \"servername\", \"user_id\"]);\n requireUpdate(data);\n return [a.contract_id, a.servername, a.user_id, data];\n }\n );\n register(\n \"delete\",\n \"wp_user\",\n \"WordPressユーザーと投稿等を削除(確認先: get_wphosting_wp_user/list_wphosting_wp_users。user_id=1は削除不可)\",\n { ...site, user_id: positiveId(\"WordPressユーザーID\"), confirmed },\n \"deleteWphostingWpUser\",\n (a) => [a.contract_id, a.servername, a.user_id]\n );\n\n register(\n \"list\",\n \"security_settings\",\n \"公開対象10キーのWordPressセキュリティ設定を取得\",\n site,\n \"getWphostingSecurity\",\n (a) => [a.contract_id, a.servername]\n );\n register(\n \"update\",\n \"security_setting\",\n \"WordPressセキュリティ設定を変更\",\n {\n ...site,\n key: z\n .string()\n .regex(/^[a-z0-9_]+$/)\n .max(100)\n .describe(\"list_wphosting_security_settingsで取得した設定key\"),\n is_enable: z.boolean(),\n },\n \"updateWphostingSecurity\",\n (a) => [a.contract_id, a.servername, a.key, { is_enable: a.is_enable }]\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ApiClient, BrandConfig } from 'xnp-shared';\nimport { withServerTargetResolution } from '../server-target.js';\nimport type { ServerTargetResolver } from '../server-target.js';\nimport { registerServerInfoTools } from './server/server-info.js';\nimport { registerCronTools } from './server/cron.js';\nimport { registerSshTools } from './server/ssh.js';\nimport { registerWordpressTools } from './server/wordpress.js';\nimport { registerMailTools } from './server/mail.js';\nimport { registerAutoReplyTools } from './server/auto-reply.js';\nimport { registerSmtpAbroadRestrictionTools } from './server/smtp-abroad-restriction.js';\nimport { registerDkimTools } from './server/dkim.js';\nimport { registerDmarcTools } from './server/dmarc.js';\nimport { registerSpfTools } from './server/spf.js';\nimport { registerSpamFilterTools } from './server/spam-filter.js';\nimport { registerFtpTools } from './server/ftp.js';\nimport { registerDatabaseTools } from './server/database.js';\nimport { registerDomainTools } from './server/domain.js';\nimport { registerSslDnsTools } from './server/ssl-dns.js';\nimport { registerResourceMonitorTools } from './server/resource-monitor.js';\nimport { registerWafTools } from './server/waf.js';\nimport { registerPhpIniTools } from './server/php-ini.js';\nimport { registerWordPressSecurityTools } from './server/wordpress-security.js';\nimport { registerXAcceleratorTools } from './server/x-accelerator.js';\nimport { registerServerCacheTools } from './server/server-cache.js';\nimport { registerBrowserCacheTools } from './server/browser-cache.js';\nimport { registerUrlRedirectTools } from './server/url-redirect.js';\nimport { registerAccessDenyTools } from './server/access-deny.js';\nimport { registerXPageSpeedTools } from './server/xpagespeed.js';\nimport { registerAutoBackupTools } from './server/auto-backup.js';\nimport { registerMysqlBackupTools } from './server/mysql-backup.js';\nimport { registerDomainServiceTools } from './domain/index.js';\nimport { registerWphostingTools } from './wphosting/index.js';\n\nexport function registerServerTools(\n server: McpServer,\n client: ApiClient,\n brand: BrandConfig,\n resolver?: ServerTargetResolver,\n): void {\n const targetServer = resolver ? withServerTargetResolution(server, resolver) : server;\n const targetClient = resolver?.client ?? client;\n\n registerServerInfoTools(targetServer, targetClient, brand);\n registerCronTools(targetServer, targetClient, brand);\n registerSshTools(targetServer, targetClient, brand);\n registerWordpressTools(targetServer, targetClient, brand);\n registerMailTools(targetServer, targetClient, brand);\n registerAutoReplyTools(targetServer, targetClient, brand);\n registerSmtpAbroadRestrictionTools(targetServer, targetClient, brand);\n registerDkimTools(targetServer, targetClient, brand);\n registerDmarcTools(targetServer, targetClient, brand);\n registerSpfTools(targetServer, targetClient, brand);\n registerSpamFilterTools(targetServer, targetClient, brand);\n registerFtpTools(targetServer, targetClient, brand);\n registerDatabaseTools(targetServer, targetClient, brand);\n registerDomainTools(targetServer, targetClient, brand);\n registerSslDnsTools(targetServer, targetClient, brand);\n registerResourceMonitorTools(targetServer, targetClient, brand);\n registerWafTools(targetServer, targetClient, brand);\n registerPhpIniTools(targetServer, targetClient, brand);\n registerWordPressSecurityTools(targetServer, targetClient, brand);\n registerXAcceleratorTools(targetServer, targetClient, brand);\n registerServerCacheTools(targetServer, targetClient, brand);\n registerBrowserCacheTools(targetServer, targetClient, brand);\n registerUrlRedirectTools(targetServer, targetClient, brand);\n registerAccessDenyTools(targetServer, targetClient, brand);\n registerXPageSpeedTools(targetServer, targetClient, brand);\n registerAutoBackupTools(targetServer, targetClient, brand);\n registerMysqlBackupTools(targetServer, targetClient, brand);\n}\n\nexport function registerAllTools(\n server: McpServer,\n client: ApiClient,\n brand: BrandConfig,\n service: 'server' | 'domain' | 'wphosting' | readonly ('server' | 'domain' | 'wphosting')[] = 'server',\n options: {\n enableHighRiskExecute?: boolean;\n serverTargetResolver?: ServerTargetResolver;\n } = {},\n): void {\n const services = Array.isArray(service) ? [...new Set(service)] : [service];\n\n if (services.includes('server')) {\n registerServerTools(server, client, brand, options.serverTargetResolver);\n }\n if (services.includes('domain')) {\n registerDomainServiceTools(server, client, brand, options);\n }\n if (services.includes('wphosting')) {\n registerWphostingTools(server, client, brand);\n }\n}\n","{\n \"name\": \"xserver-mcp\",\n \"version\": \"1.3.0\",\n \"description\": \"Official MCP server for XServer API — manage your XServer hosting from AI assistants\",\n \"type\": \"module\",\n \"bin\": {\n \"xserver-mcp\": \"./dist/index.js\"\n },\n \"main\": \"./dist/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"tsc\": \"tsc --noEmit\",\n \"start\": \"node dist/index.js\",\n \"prepublishOnly\": \"tsup\"\n },\n \"keywords\": [\n \"xserver\",\n \"mcp\",\n \"model-context-protocol\",\n \"ai\",\n \"hosting\",\n \"server\",\n \"api\"\n ],\n \"author\": \"Xserver Inc.\",\n \"license\": \"MIT\",\n \"homepage\": \"https://developer.xserver.ne.jp\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.29.0\",\n \"zod\": \"^3.24.0\"\n },\n \"devDependencies\": {\n \"xnp-mcp-core\": \"*\",\n \"xnp-shared\": \"*\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n }\n}\n","import { run } from 'xnp-mcp-core';\r\nimport pkg from '../package.json' with { type: 'json' };\r\n\r\nawait run({\r\n brand: 'xserver',\r\n apiBase: 'https://api.xserver.ne.jp',\r\n displayName: 'XServer',\r\n domainTermsUrl: 'https://www.xdomain.ne.jp/rule/rule.php',\r\n domainPrivacyUrl: 'https://www.xdomain.ne.jp/privacy_announcement.php',\r\n commandName: 'xserver-mcp',\r\n configDir: 'xserver-mcp',\r\n}, {\r\n name: pkg.name,\r\n version: pkg.version,\r\n});\r\n"],"mappings":"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","names":["domain","dnsId","domainName","idempotencyKey","contractId","servername","body","domain","record","servername","z","z","z","z","z","z","z","z","z","z","body","z","z","domain","z","z","z","PARTIAL_UPDATE_EMPTY_MESSAGE","z","domain","z","z","body","z","z","PARTIAL_UPDATE_EMPTY_MESSAGE","domain","z","z","z","z","z","z","domain","z","z","domain","z","z","z","PARTIAL_UPDATE_EMPTY_MESSAGE","z","domain","z","PARTIAL_UPDATE_EMPTY_MESSAGE","z","domain","z","z","domain","z","z","domain","z","z","domain","z","z","domain","z","z","z","z","z","z","buildUpdateBody","domain","z","z","z","z","z","z","domain","nameservers","confirmed","years","z","z","idempotencyKey","dnsType","description","servername"]}