Skip to main content

AIS WebMCP — manage WebMCP for any website

Make your website's capabilities clear to AI agents. ais-webmcp is the framework-independent PyPI command for creating, validating and maintaining WebMCP descriptions in the context of your website.

Use it with static sites, CMS websites, documentation portals or custom web applications. Work with local JSON and YAML manifests, then connect the shared browser helper to your website's own content and actions.

DE: Das frameworkunabhängige PyPI-Kommando, mit dem Sie WebMCP-Beschreibungen für jede Art von Webseite erstellen, prüfen und sinnvoll pflegen können.

Background

Insight UI is our open-source, WCAG-focused UI package, which we presented at the September meetup of the Berlin Python User Group, hosted at our office. Our work on WebMCP grew out of it as an extension, which is why we built insight-ui-webmcp first. At the meetup, people asked whether we could offer it without the Django layer we use for all our production-critical applications. That question is how ais-webmcp came about: the same WebMCP core, without the framework. We look forward to hearing what you think, and we warmly welcome contributions; see how to contribute.

Packages at a glance

One browser runtime, register.js, ships in the Python package and the npm package.

flowchart LR
  Core["ais-webmcp (PyPI)<br/>manifest, CLI, register.js"]
  Django["insight-ui-webmcp (PyPI)<br/>Django adapter"]
  NPM["@alpininsightsolutions/webmcp (npm)<br/>register.js only"]
  Core --> Django
  Core --> NPM
  Django --> S1["Django sites"]
  NPM --> S2["other websites"]
  • ais-webmcp on PyPI is the core: manifests, the CLI, and register.js. The Django adapter insight-ui-webmcp installs that core.
  • @alpininsightsolutions/webmcp (coming soon) on npm is register.js only, for other websites.

The npm package is pending its first release and is not live yet. The unscoped npm package webmcp is unrelated.

pip install ais-webmcp
ais-webmcp init --output manifest.yaml --static
ais-webmcp validate manifest.yaml
ais-webmcp list manifest.yaml
ais-webmcp doctor manifest.yaml --html index.html
ais-webmcp export manifest.yaml --output webmcp.manifest.json
ais-webmcp export manifest.yaml --kind tools --output tools.json
ais-webmcp export manifest.yaml --kind snippet --output snippet.html
ais-webmcp diff manifest.yaml webmcp.manifest.json

Python 3.12+; Django is not required. doctor and status report local configuration and refuse remote URLs; browser support is verified separately. CSP is noted and not rewritten. Origin Trial tokens are redacted to character lengths. export can write a canonical manifest, a JSON tools list, or a static snippet with no token. Existing files are protected unless you pass --force. Consequential tools stay disabled in scaffolds until the host explicitly enables and implements them.

Output schemas

Declare a Draft 2020-12 JSON Schema for each tool result next to its input schema. The canonical key is outputSchema; output_schema is an alias, and only one of them may be set. ToolSpec.output_schema writes outputSchema.

ais-webmcp validate checks a present output schema: it must be a JSON object and a valid Draft 2020-12 schema. An invalid schema fails validation. Omitting the schema does not. The result stays ok, the exit code stays 0, and each tool without a schema adds a finding:

{
  "path": "tools[0]",
  "code": "missing_output_schema",
  "severity": "low",
  "message": "missing outputSchema (also accepts output_schema). Optional for existing hosts; absence is a low-severity finding."
}

Check engines can treat missing_output_schema as a low-severity finding. Existing hosts keep validating until they declare output schemas. Text reports print finding: lines and still start with ok: when there are no errors.

For Django and Insight UI applications, add the insight-ui-webmcp adapter. The core owns the shared schema and browser runtime; the adapter uses the installed core rather than shipping a second copy.

Development preview; the first public release is pending.

Public npm package

The browser runtime is prepared as the public package @alpininsightsolutions/webmcp (coming soon). Enterprise code never goes to npm. The tarball is only the built register.js, its types, this README, LICENSE, and NOTICE (package.json is included because npm always packs it). A path under enterprise/, a path containing webmcp_check, or a .env file fails the tarball guard.

PyPI / CLI ais-webmcp
npm @alpininsightsolutions/webmcp
global InsightUiWebmcp
npm install @alpininsightsolutions/webmcp
import InsightUiWebmcp from "@alpininsightsolutions/webmcp";

const status = InsightUiWebmcp.status();
if (status.supported) {
  await InsightUiWebmcp.registerFromManifest(
    {
      profile: "webpage",
      version: "1",
      tools: [
        {
          id: "search",
          name: "Search",
          description: "Search this page",
          inputSchema: {
            type: "object",
            properties: { q: { type: "string" } },
          },
        },
      ],
    },
    {
      search(input: { q?: string }) {
        return { results: [] };
      },
    },
  );
}

A <script> tag assigns that same object to window.InsightUiWebmcp.

The committed npm version is the 0.0.0 placeholder. Publish stamps the vX.Y.Z tag into package.json when the name stays in the @alpininsightsolutions scope, the license is Apache-2.0, the files allowlist includes LICENSE and NOTICE, and the repository URL is git+https://github.com/alpininsight/ais-webmcp.git. npm run build:release then injects that version into register.js. The workflow packs that build and publishes the tarball with provenance. prepublishOnly rejects a local npm publish while the version is still 0.0.0. Publishing runs from .github/workflows/npm-publish.yml, a manual dispatch from main with that tag. Trusted Publishing attaches provenance. The trusted publisher is bound to alpininsight/ais-webmcp, workflow npm-publish.yml, and environment npm-ais-webmcp. A release goes out only with Peter's go. The first publish is the manual bootstrap. One-time npmjs.com setup is in docs/release.md.

Development

uv sync --locked --all-groups
npm ci
npm run check:js-build
npm test
uv run --locked pytest
uv run --locked pre-commit run --all-files

See how to contribute.

Python 3.12–3.14 and Node 24 are the versions this repository tests. Node 24 is the repo pin (.nvmrc and devEngines); the published package does not set engines, so installing the browser runtime does not warn on other Node versions. Each release contains exactly one wheel and one sdist.

License: Apache-2.0 with NOTICE. Bundled dependencies retain their own licenses in the generated runtime banner.

Split provenance

Core history was extracted from insight-ui-webmcp at d6ead80843dbe42096791dd6688ed58a35dc3291. See the implementation tracker for the architecture decision, adapter/publisher/host migration and separate release evidence. The original repository history and existing host pins are preserved.

CI and Python release

See CI and release evidence for code versus metadata checks, Main CI reuse and the central build-once Python publication handoff.

Metadata

Release files for ais-webmcp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ais-webmcp 0.1.1
File Size Uploaded Provenance
ais_webmcp-0.1.1.tar.gz 47.2 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for ais-webmcp 0.1.1
File Interpreter ABI Platform
ais_webmcp-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 103.8 kB

Release files / ais_webmcp-0.1.1.tar.gz

Download URL ais_webmcp-0.1.1.tar.gz
Size 47.2 kB
Tags Source
SHA-256 checksum
How to use checksums
52e2d79bd50173cf28facd073483812bc3dd4914ea5ef73485cd4623affe5654
BLAKE2b-256 checksum
How to use checksums
aa419f688527b7caa13ed9262921c405daa1d8b7aa68b830e10f0cf5d2760e0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / ais_webmcp-0.1.1-py3-none-any.whl

Download URL ais_webmcp-0.1.1-py3-none-any.whl
Size 56.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1f7ee49a3c5bf5e53fc6597bf715d0df67ce94e67e7afea1acf6595f6990d776
BLAKE2b-256 checksum
How to use checksums
02f14f07b11c11ec0ad3e94c035b5128a670e52f1938dca559ceadbdedb68e56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Security for ais-webmcp 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for ais_webmcp-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page