Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Crawler Summary
Model Context Protocol (MCP) server for Kinsta WordPress hosting Kinsta MCP Server $1 $1 $1 $1 $1 $1 $1 $1 A $1 server for the $1 WordPress hosting platform. This server allows AI assistants (like Claude) to interact with your Kinsta sites and infrastructure securely via the $1. Quick Start Prerequisites - Node.js v22 or higher - A Kinsta account with API access - A Kinsta API key (see $1) Step 1: Generate a Kinsta API Key 1. Log in to $1 2. Go to **Your name > Company settings > Capability contract not published. No trust telemetry is available yet. Last updated 2/25/2026.
Freshness
Last checked 2/25/2026
Best For
kinsta-mcp is best for mcp, model-context-protocol, kinsta workflows where MCP compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
editorial-content, GITHUB MCP, runtime-metrics, public facts pack
Model Context Protocol (MCP) server for Kinsta WordPress hosting Kinsta MCP Server $1 $1 $1 $1 $1 $1 $1 $1 A $1 server for the $1 WordPress hosting platform. This server allows AI assistants (like Claude) to interact with your Kinsta sites and infrastructure securely via the $1. Quick Start Prerequisites - Node.js v22 or higher - A Kinsta account with API access - A Kinsta API key (see $1) Step 1: Generate a Kinsta API Key 1. Log in to $1 2. Go to **Your name > Company settings >
Public facts
4
Change events
1
Artifacts
0
Freshness
Feb 25, 2026
Capability contract not published. No trust telemetry is available yet. Last updated 2/25/2026.
Trust score
Unknown
Compatibility
MCP
Freshness
Feb 25, 2026
Vendor
Jacob Hartmann
Artifacts
0
Benchmarks
0
Last release
1.0.2
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Capability contract not published. No trust telemetry is available yet. Last updated 2/25/2026.
Setup snapshot
git clone https://github.com/jacob-hartmann/kinsta-mcp.gitSetup complexity is MEDIUM. Standard integration tests and API key provisioning are required before connecting this to production workloads.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Jacob Hartmann
Protocol compatibility
MCP
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
json
{
"mcpServers": {
"kinsta": {
"command": "npx",
"args": ["-y", "kinsta-mcp"],
"env": {
"KINSTA_API_KEY": "your-api-key",
"KINSTA_COMPANY_ID": "your-company-id"
}
}
}
}json
{
"mcpServers": {
"kinsta": {
"command": "npx",
"args": ["-y", "kinsta-mcp"],
"env": {
"KINSTA_API_KEY": "your-api-key",
"KINSTA_COMPANY_ID": "your-company-id"
}
}
}
}json
{
"mcpServers": {
"kinsta": {
"command": "npx",
"args": ["-y", "kinsta-mcp"],
"env": {
"KINSTA_API_KEY": "your-api-key",
"KINSTA_COMPANY_ID": "your-company-id"
}
}
}
}bash
# Clone the repo git clone https://github.com/jacob-hartmann/kinsta-mcp.git cd kinsta-mcp # Use the Node.js version from .nvmrc # (macOS/Linux nvm): nvm install && nvm use # (Windows nvm-windows): nvm install 22 && nvm use 22 nvm install nvm use # Install dependencies pnpm install # Copy .env.example and configure cp .env.example .env # Edit .env with your API key and company ID
bash
# Development mode (auto-reload) pnpm dev # Production build pnpm build # Production run pnpm start
bash
# Run from source pnpm inspect # Run from built output pnpm inspect:dist
Full documentation captured from public sources, including the complete README when available.
Docs source
GITHUB MCP
Editorial quality
ready
Model Context Protocol (MCP) server for Kinsta WordPress hosting Kinsta MCP Server $1 $1 $1 $1 $1 $1 $1 $1 A $1 server for the $1 WordPress hosting platform. This server allows AI assistants (like Claude) to interact with your Kinsta sites and infrastructure securely via the $1. Quick Start Prerequisites - Node.js v22 or higher - A Kinsta account with API access - A Kinsta API key (see $1) Step 1: Generate a Kinsta API Key 1. Log in to $1 2. Go to **Your name > Company settings >
A Model Context Protocol (MCP) server for the Kinsta WordPress hosting platform.
This server allows AI assistants (like Claude) to interact with your Kinsta sites and infrastructure securely via the Kinsta API.
You'll also need your Company ID, which can be found in MyKinsta under Company settings.
Choose the setup that matches your MCP client:
Add to your claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"kinsta": {
"command": "npx",
"args": ["-y", "kinsta-mcp"],
"env": {
"KINSTA_API_KEY": "your-api-key",
"KINSTA_COMPANY_ID": "your-company-id"
}
}
}
}
Add to your Claude Code MCP settings (~/.claude/mcp.json or project-level):
{
"mcpServers": {
"kinsta": {
"command": "npx",
"args": ["-y", "kinsta-mcp"],
"env": {
"KINSTA_API_KEY": "your-api-key",
"KINSTA_COMPANY_ID": "your-company-id"
}
}
}
}
In Cursor settings, add an MCP server:
{
"mcpServers": {
"kinsta": {
"command": "npx",
"args": ["-y", "kinsta-mcp"],
"env": {
"KINSTA_API_KEY": "your-api-key",
"KINSTA_COMPANY_ID": "your-company-id"
}
}
}
}
| Variable | Required | Default | Description |
| --------------------- | -------- | --------------------------- | ----------------------------------- |
| KINSTA_API_KEY | Yes | - | Kinsta API key (Bearer token) |
| KINSTA_COMPANY_ID | Yes | - | Your Kinsta company ID |
| KINSTA_API_BASE_URL | No | https://api.kinsta.com/v2 | API base URL (override for testing) |
The server provides 83 tools organized by category:
| Tool | Description |
| ------------- | ---------------------------------------------------- |
| kinsta.ping | Check server status and API credential configuration |
| Tool | Description |
| ---------------------- | --------------------------------------------------------------------------- |
| kinsta.auth.validate | Validate the current Kinsta API key and return account information if valid |
| Tool | Description |
| -------------------------- | -------------------------------------------------------------------- |
| kinsta.operations.status | Check the status of an asynchronous Kinsta operation by operation ID |
| Tool | Description |
| ------------------------------ | --------------------------------------------------------------------------- |
| kinsta.company.users | List all users in your Kinsta company |
| kinsta.company.regions | List all available deployment regions for your Kinsta company |
| kinsta.company.api-keys | List all API keys for your Kinsta company |
| kinsta.company.activity-logs | List company activity logs (supports filtering and pagination) |
| kinsta.company.plugins | List WordPress plugins across all sites (supports search/filter/pagination) |
| kinsta.company.themes | List WordPress themes across all sites (supports search/filter/pagination) |
| Tool | Description |
| --------------------------- | --------------------------------------------------------------------------------------- |
| kinsta.sites.list | List all WordPress sites (optionally include environment details) |
| kinsta.sites.get | Get details for a specific Kinsta site by ID |
| kinsta.sites.create | Create a new WordPress site (returns an operation_id) |
| kinsta.sites.create-plain | Create a new plain (empty) site without WordPress installed (returns an operation_id) |
| kinsta.sites.clone | Clone an existing site (returns an operation_id) |
| kinsta.sites.delete | Delete a Kinsta site permanently (cannot be undone) |
| kinsta.sites.reset | Reset a site to a fresh WordPress install (destructive) |
| Tool | Description |
| --------------------------------------------- | --------------------------------------------------------------------------------------- |
| kinsta.environments.list | List all environments for a site |
| kinsta.environments.create | Create a new WordPress environment for a site (returns an operation_id) |
| kinsta.environments.create-plain | Create a new plain (empty) environment for a site (returns an operation_id) |
| kinsta.environments.clone | Clone an existing environment (returns an operation_id) |
| kinsta.environments.push | Push one environment to another (destructive; returns an operation_id) |
| kinsta.environments.delete | Delete an environment (cannot be undone) |
| kinsta.environments.php-allocation | Change PHP worker allocation for an environment (returns an operation_id) |
| kinsta.environments.php-allocation-site | Change PHP worker allocation for all environments in a site (returns an operation_id) |
| kinsta.environments.webroot | Change the webroot subfolder for an environment (returns an operation_id) |
| kinsta.environments.files | List files in an environment's file system |
| kinsta.environments.redirects | List redirect rules for an environment (supports filtering/pagination) |
| kinsta.environments.redirects.update | Create, update, or delete redirect rules for an environment |
| kinsta.environments.ssh.status | Get SSH/SFTP status for an environment |
| kinsta.environments.ssh.toggle | Enable or disable SSH/SFTP access for an environment |
| kinsta.environments.ssh.password-access | Enable or disable SSH password-based access |
| kinsta.environments.ssh.generate-password | Generate a new SSH/SFTP password |
| kinsta.environments.ssh.password | Get the current SSH/SFTP password |
| kinsta.environments.ssh.ip-allowlist | Get the SSH IP allowlist |
| kinsta.environments.ssh.ip-allowlist.update | Update the SSH IP allowlist |
| kinsta.environments.ssh.config | Get SSH connection configuration for an environment |
| kinsta.environments.ssh.password-expiration | Change SSH password expiration interval |
| kinsta.environments.wp-cli | Run a WP-CLI command on an environment (must start with wp ) |
| kinsta.environments.phpmyadmin | Get a phpMyAdmin login token for an environment |
| Tool | Description |
| -------------------------------- | --------------------------------------------------------------------- |
| kinsta.tools.clear-cache | Clear the server cache for an environment (returns an operation_id) |
| kinsta.tools.restart-php | Restart PHP for an environment (returns an operation_id) |
| kinsta.tools.php-version | Change the PHP version for an environment (returns an operation_id) |
| kinsta.tools.denied-ips | Get the list of denied (blocked) IP addresses for an environment |
| kinsta.tools.denied-ips.update | Update the list of denied (blocked) IP addresses for an environment |
| Tool | Description |
| ---------------------------- | ----------------------------------------------------------- |
| kinsta.plugins.list | List all plugins for an environment |
| kinsta.plugins.update | Update a single plugin (returns an operation_id) |
| kinsta.plugins.bulk-update | Update multiple plugins at once (returns an operation_id) |
| kinsta.plugins.list-wp | List plugins with details from the WordPress.org repository |
| kinsta.themes.list | List all themes for an environment |
| kinsta.themes.update | Update a single theme (returns an operation_id) |
| kinsta.themes.bulk-update | Update multiple themes at once (returns an operation_id) |
| kinsta.themes.list-wp | List themes with details from the WordPress.org repository |
| Tool | Description |
| ----------------------------- | ------------------------------------------ |
| kinsta.domains.list | List all custom domains for an environment |
| kinsta.domains.add | Add a custom domain to an environment |
| kinsta.domains.delete | Remove custom domains from an environment |
| kinsta.domains.verification | Get DNS verification records for a domain |
| kinsta.domains.set-primary | Set the primary domain for an environment |
| Tool | Description |
| --------------------------- | ------------------------------------- |
| kinsta.dns.domains | List all DNS domains for your company |
| kinsta.dns.records | List DNS records for a domain |
| kinsta.dns.records.create | Create a new DNS record |
| kinsta.dns.records.update | Update an existing DNS record |
| kinsta.dns.records.delete | Delete a DNS record |
| Tool | Description |
| ------------------------------- | ------------------------------------------------------------------- |
| kinsta.edge-cache.clear | Clear the edge cache for an environment (returns an operation_id) |
| kinsta.edge-cache.toggle | Enable or disable edge caching for an environment |
| kinsta.cdn.clear-cache | Clear the CDN cache for an environment (returns an operation_id) |
| kinsta.cdn.image-optimization | Configure CDN image optimization settings |
| Tool | Description |
| -------------------------- | --------------------------------------------------------- |
| kinsta.sftp-users.list | List additional SFTP/SSH user accounts for an environment |
| kinsta.sftp-users.toggle | Enable or disable additional SFTP/SSH accounts |
| kinsta.sftp-users.add | Add a new additional SFTP/SSH user account |
| kinsta.sftp-users.remove | Remove an additional SFTP/SSH user account |
| Tool | Description |
| ----------------------------- | ----------------------------------------------------------------------------- |
| kinsta.backups.list | List all backups for an environment |
| kinsta.backups.downloadable | List downloadable backups for an environment |
| kinsta.backups.create | Create a manual backup (returns an operation_id) |
| kinsta.backups.restore | Restore an environment from a backup (destructive; returns an operation_id) |
| kinsta.backups.delete | Delete a backup (cannot be undone) |
| Tool | Description |
| -------------------------------------- | ---------------------------------------------------------------- |
| kinsta.analytics.visits | Get visitor analytics for an environment over a date range |
| kinsta.analytics.visits-usage | Get visitor usage analytics (billable visits) |
| kinsta.analytics.bandwidth | Get bandwidth analytics for an environment over a date range |
| kinsta.analytics.bandwidth-usage | Get bandwidth usage analytics (billable bandwidth) |
| kinsta.analytics.cdn-bandwidth | Get CDN bandwidth analytics for an environment over a date range |
| kinsta.analytics.cdn-bandwidth-usage | Get CDN bandwidth usage analytics (billable CDN bandwidth) |
| kinsta.analytics.disk-space | Get disk space usage analytics for an environment |
| Tool | Description |
| ----------------- | ---------------------------------------- |
| kinsta.logs.get | Get log file contents for an environment |
The server exposes data as MCP resources:
| Resource URI | Description |
| ------------------ | ----------------------------------------------- |
| kinsta://sites | List all WordPress sites in your Kinsta company |
| kinsta://regions | List available deployment regions |
| Resource URI | Description |
| --------------------------------------- | -------------------------------- |
| kinsta://sites/{site_id} | Details for a specific site |
| kinsta://sites/{site_id}/environments | Environments for a specific site |
The server provides guided prompts for common workflows:
| Prompt | Description |
| ------------------ | ---------------------------------------------------------------------- |
| deploy-site | Guide through creating a new WordPress site on Kinsta |
| manage-backups | Guide for backup list, create, restore, download, and delete workflows |
| push-environment | Guide for pushing changes between environments (e.g. staging to live) |
| setup-domain | Guide for adding a custom domain to a Kinsta environment |
# Clone the repo
git clone https://github.com/jacob-hartmann/kinsta-mcp.git
cd kinsta-mcp
# Use the Node.js version from .nvmrc
# (macOS/Linux nvm): nvm install && nvm use
# (Windows nvm-windows): nvm install 22 && nvm use 22
nvm install
nvm use
# Install dependencies
pnpm install
# Copy .env.example and configure
cp .env.example .env
# Edit .env with your API key and company ID
# Development mode (auto-reload)
pnpm dev
# Production build
pnpm build
# Production run
pnpm start
You can use the MCP Inspector to debug the server:
# Run from source
pnpm inspect
# Run from built output
pnpm inspect:dist
pnpm inspect loads .env automatically via dotenv (see .env.example).
If you see Ignored build scripts: esbuild..., run pnpm approve-builds and allow esbuild.
In CI we install dependencies with lifecycle scripts disabled (pnpm install --ignore-scripts) and then explicitly rebuild only esbuild for the production build job.
Contributions are welcome! Please see CONTRIBUTING.md for guidelines on how to contribute to this project.
See SECURITY.md for security policy and reporting vulnerabilities.
This is a community project provided "as is" with no guaranteed support. See SUPPORT.md for details.
MIT © Jacob Hartmann
Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/snapshot"
curl -s "https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/contract"
curl -s "https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
80
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
74
Expose OpenAPI definition endpoints as MCP tools using the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Rank
72
An actix_web backend for the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"MCP"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_MCP",
"generatedAt": "2026-04-17T00:08:20.682Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "MCP",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
},
{
"key": "mcp",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "model-context-protocol",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "kinsta",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "wordpress",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "hosting",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "ai",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "claude",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "cli",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
}
],
"flattenedTokens": "protocol:MCP|unknown|profile capability:mcp|supported|profile capability:model-context-protocol|supported|profile capability:kinsta|supported|profile capability:wordpress|supported|profile capability:hosting|supported|profile capability:ai|supported|profile capability:claude|supported|profile capability:cli|supported|profile"
}Facts JSON
[
{
"factKey": "docs_crawl",
"category": "integration",
"label": "Crawlable docs",
"value": "6 indexed pages on the official domain",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
},
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Jacob Hartmann",
"href": "https://github.com/jacob-hartmann/kinsta-mcp",
"sourceUrl": "https://github.com/jacob-hartmann/kinsta-mcp",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-02-25T03:09:20.883Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "MCP",
"href": "https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-02-25T03:09:20.883Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-jacob-hartmann-kinsta-mcp/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "docs_update",
"title": "Docs refreshed: Sign in to GitHub · GitHub",
"description": "Fresh crawlable documentation was indexed for the official domain.",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
}
]Sponsored
Ads related to kinsta-mcp and adjacent AI workflows.