diff --git a/.github/workflows/catalog.yml b/.github/workflows/catalog.yml index 0b0981f..9028f57 100644 --- a/.github/workflows/catalog.yml +++ b/.github/workflows/catalog.yml @@ -4,10 +4,15 @@ on: pull_request: paths: - "catalog/*/*.json" + - "catalog-icons.json" + - "icons/**" - "ai-catalog.json" - "scripts/generate_ai_catalog.py" + - "requirements.txt" - "tests/*.py" - ".github/workflows/catalog.yml" + - "CONTRIBUTING.md" + - "README.md" push: branches: - main @@ -32,6 +37,7 @@ jobs: with: repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} ref: ${{ github.event.pull_request.head.ref || github.ref }} + - run: python3 -m pip install -r requirements.txt - run: python3 -m unittest discover -s tests - run: python3 scripts/generate_ai_catalog.py - name: Update pull request diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5f21b6a..0984833 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -82,6 +82,157 @@ Do not create a copied descriptor to represent a server that is already imported Registry references do not identify a file in this repository. Do not attach `metadata.sourceSet` or `metadata.repoPath` pointing to a copied descriptor. +#### Reviewed resource icons + +Icons are optional. Declare them in the root `catalog-icons.json` overlay, for +both contributor-managed and registry-imported resources. Do not copy a registry +descriptor or create another resource entry to attach an icon. Use the exact +generated `urn:air:` identifier from `ai-catalog.json`, not the source `urn:ai:` +identifier, a display name, or a descriptor URL. + +The tooling-only change does not add an overlay file; create it when adding the +first approved declarations. Artwork and production declarations are reviewed +in a separate change. +The following is a **synthetic example**, not an available asset, real digest, +or evidence of permission: + +```json +{ + "icons": [ + { + "identifier": "urn:air:registry.modelcontextprotocol.io:example:weather", + "url": "https://raw.githubusercontent.com/github/agentfinder-catalog/0123456789abcdef0123456789abcdef01234567/icons/example/weather.png", + "provenance": { + "sourceUrl": "https://example.com/weather-artwork", + "license": "CC0-1.0", + "permissionUrl": "https://example.com/weather-artwork-permission", + "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + } + ] +} +``` + +Omit `version` to cover all versions of that exact identifier. To restrict an +icon to one existing version, add a nonempty `version` string to the declaration. +Do not supply `null`. Duplicate or overlapping declarations fail validation, +including an identifier-wide declaration combined with an exact-version one. +Unmatched identifiers or versions also fail; explicitly maintain declarations +when a registry resource disappears or a version-specific reference rolls over. +Prefer identifier-wide declarations when the artwork legitimately covers all +versions. + +The generator applies the overlay after normal entry selection and registry +imports, adding only the scalar +`metadata["com.github.agentfinder.icon.url"]`. It preserves identifiers, versions, +descriptor URLs, native data, and other metadata. Provenance is not published in +the generated entry. The icon key is reserved for the overlay: do not put it +directly in contributor-managed entries or registry inputs. Unknown overlay +fields and duplicate JSON keys are rejected. An absent overlay is treated as +empty for compatibility with older checkouts. + +For the example above, the generated entry is: + +```json +{ + "identifier": "urn:air:registry.modelcontextprotocol.io:example:weather", + "displayName": "Weather", + "type": "application/mcp-server+json", + "version": "1.0.0", + "url": "https://api.mcp.github.com/v0.1/servers/example%2Fweather/versions/1.0.0", + "metadata": { + "com.github.agentfinder.icon.url": "https://raw.githubusercontent.com/github/agentfinder-catalog/0123456789abcdef0123456789abcdef01234567/icons/example/weather.png" + } +} +``` + +This input key is not a new client response field. Once service support is +deployed, Agent Finder emits the optional nested `metadata.github.icon.url`. +A supported curated URL takes precedence over a supported descriptor-declared +icon. Removing the curated declaration restores descriptor-icon fallback; +it does not suppress a descriptor icon. Invalid service-side declarations also +fall back. Invalid catalog-authored declarations instead fail generation. +Clients keep their resource-type fallback when no supported icon is available +or an image cannot be loaded. + +##### Asset review and validation + +- Place reviewed assets at `icons//.png`. Publisher and asset + names start with an ASCII letter, digit, underscore, or hyphen; remaining + characters may also include dots. Asset paths cannot contain symlinks. +- Use **static PNG** files, at most **256 KiB (262144 bytes)**, with width and + height between **1 and 512 pixels**. Pillow verifies PNG integrity and decodes + the image; animated images are rejected. Validation follows Pillow's PNG + decoder rather than implementing a separate strict chunk grammar (for example, + it does not reject otherwise decodable PNGs solely for trailing bytes). + These checks are not image sanitization; reviewers must inspect the rendered image. +- URLs must use HTTPS and the exact `raw.githubusercontent.com` host, this + repository, a full lowercase 40-hex commit reference, and the asset path. + Mutable refs, credentials, explicit ports, query strings, fragments, encoded + paths, other hosts/repositories, and other image formats are rejected. +- Supply `sourceUrl` identifying the original artwork, `license` identifying its + license or explicit permission, `permissionUrl` pointing to reviewable evidence + that redistribution of these bytes is permitted, and a lowercase `sha256` of + the actual file. Alternatively, when approval is given without a URL, supply + `sourceUrl`, `sha256`, and a nonempty `approval` attestation describing the + explicit authorization for public redistribution; do not invent a license or + permission link. These two provenance forms are mutually exclusive. + Source and permission URLs must be absolute HTTPS without + credentials or ports. Generator checks establish syntax and a matching local + digest, **not legal permission, public availability, or ownership**. Reviewers + must verify the evidence and any attribution or notice requirements. +- Do not infer logos from repository-owner avatars or acquire/copy vendor artwork + without verified redistribution permission. The repository's MIT license + does not establish permission for third-party artwork. An icon does not prove + vendor ownership, endorsement, or official-product approval. + +Compute a file's digest with: + +```bash +shasum -a 256 icons//.png +``` + +##### Adding, replacing, and removing icons + +**Add:** obtain permission and fulfill any required notices first. Publish the +reviewed asset in an asset-only commit, then use that existing commit's raw URL +in a separate declaration change. A declaration cannot pin the SHA of its own +containing commit. Reviewers must fetch the public pinned URL and verify its bytes +against the recorded SHA-256: the generator checks the file in the current +checkout, not the remote asset at that commit. Regenerate and review +`ai-catalog.json`; only the intended icon metadata should change. + +**Replace:** publish the newly reviewed asset first, then update its immutable URL, +provenance, and digest together. Changed image bytes must have a changed URL. +Do not merely overwrite an asset while retaining an old pinned URL. If different +resource versions need different bytes, use distinct paths so all declared assets +can be checked in the current tree. + +**Remove:** remove the overlay record and regenerate. Delete an unused current +asset only after removing all declarations that reference it. Historical pinned +bytes remain retrievable; deleting the current file does not revoke old URLs. +The service owner handles enrichment invalidation and reconciliation so an +addition, replacement, or removal takes effect in responses. + +Validate icon changes with the normal generation commands below and: + +```bash +python3 -m unittest discover -s tests +``` + +Tooling may land before service support only if the empty overlay leaves generated +resources unchanged. **Production declaration publication must follow deployed +github/agentfinder#557 foundation and github/copilot-ecosystem#1625 service +support**, plus verified redistribution permission. Catalog tooling alone is +not end-to-end icon delivery. + +The current ARD specification is +[v0.91 (Proposal)](https://github.com/ards-project/ard-spec/blob/49eb4df6f3841ccecc5c31d5175117337b568bdf/spec/ard.md); +the catalog envelope remains `specVersion: "1.0"`. Both current entry and catalog +schemas permit scalar metadata extensions, which is why this declaration is flat. +This change does not adopt JSON-LD contexts or imply support for every behavior +in the latest proposal. + #### Canvas-only plugins Catalog entries for plugins whose functionality consists entirely of a GitHub Copilot @@ -108,6 +259,7 @@ Make sure your file is valid JSON, then regenerate and check the ARD ingestion c ```bash python -m json.tool catalog//.json +python3 -m pip install -r requirements.txt python3 scripts/generate_ai_catalog.py python3 scripts/generate_ai_catalog.py --check ``` diff --git a/README.md b/README.md index 1683e5f..d45f951 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,38 @@ Each augment is a single JSON file under the publisher's directory. The publishe These per-entry files are the source of truth for contributor-managed entries. The root `ai-catalog.json` is a generated Agentic Resource Discovery (ARD) ingestion artifact that also includes missing entries from GitHub's public MCP catalog. Do not edit it by hand; regenerate it with `python3 scripts/generate_ai_catalog.py`. +Install the generator's image-validation dependency first with +`python3 -m pip install -r requirements.txt` (preferably in a virtual environment). + The Catalog workflow checks the [GitHub MCP Registry](https://api.mcp.github.com/.well-known/ai-catalog.json) hourly, independently of repository changes, and opens or updates the `automation/update-ai-catalog` pull request when the generated catalog changes. This refresh picks up registry additions and current server-version references; it does not query the general public MCP registry. Refresh changes still require the pull request to be merged before they reach the main-branch catalog. GitHub Actions schedules can be delayed, and a manual workflow run on `main` uses the same publication flow. +## Optional reviewed icons + +`catalog-icons.json` is an identity-keyed overlay for both local and +registry-imported resources. This tooling-only change does not add the file; +artwork and production declarations are reviewed separately. A missing file +means no curated icons. +Declarations use the existing generated `urn:air:` identifier +and optional exact version, without duplicating resources or changing descriptor +URLs. Generation adds only the scalar `metadata["com.github.agentfinder.icon.url"]`; +source provenance stays in the overlay. + +Reviewed assets belong under `icons//.png`, with recorded +redistribution permission or an explicit approval attestation, a matching SHA-256, +and immutable commit-pinned HTTPS +`raw.githubusercontent.com` URLs. Initial validation permits static PNG files up +to 256 KiB and 512 by 512 pixels. See +[the icon contribution guide](CONTRIBUTING.md#reviewed-resource-icons) for exact +fixtures, validation, and addition/replacement/removal instructions. Icons imply +neither endorsement nor official-product ownership. + +Production publication of declarations follows deployed +[github/agentfinder#557](https://github.com/github/agentfinder/pull/557) and +[github/copilot-ecosystem#1625](https://github.com/github/copilot-ecosystem/issues/1625) +service support. Clients continue using optional `metadata.github.icon.url` and +their existing fallbacks. Catalog validation does not mean the service fetches or +validates image bytes. + ## Contributing Want to list your skill or MCP server in the catalog? See **[CONTRIBUTING.md](CONTRIBUTING.md)** for the full guide, including the JSON schema, validation steps, and PR process. diff --git a/ai-catalog.json b/ai-catalog.json index b3bc71a..9e2af2d 100644 --- a/ai-catalog.json +++ b/ai-catalog.json @@ -22533,7 +22533,7 @@ "model-context-protocol" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:11:45Z", + "updatedAt": "2026-10-14T03:19:37Z", "metadata": { "readmeUrl": "https://github.com/bittlebitsai/bittlebits-plugin#readme", "repository": "https://github.com/bittlebitsai/bittlebits-plugin", @@ -22545,10 +22545,10 @@ "identifier": "urn:air:registry.modelcontextprotocol.io:ai.bowmark:bowmark", "displayName": "Bowmark", "type": "application/mcp-server+json", - "url": "https://api.mcp.github.com/v0.1/servers/ai.bowmark%2Fbowmark/versions/8.174.2", + "url": "https://api.mcp.github.com/v0.1/servers/ai.bowmark%2Fbowmark/versions/8.175.1", "description": "Do things on live websites: prices, availability, quotes, bookings, anything behind a form or login.", - "version": "8.174.2", - "updatedAt": "2026-10-13T18:11:49Z", + "version": "8.175.1", + "updatedAt": "2026-10-14T03:20:05Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/bowmark-ai/skill#readme", @@ -22577,7 +22577,7 @@ "supplements" ], "version": "0.2.0", - "updatedAt": "2026-10-13T18:12:02Z", + "updatedAt": "2026-10-14T03:20:27Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/colorcatalyst/catalyst-mcp#readme", @@ -22593,7 +22593,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/ai.certscore%2Fmcp-light/versions/0.2.26", "description": "Free website privacy scanner for pre-consent cookies, trackers, consent, policy, and HTTPS/TLS.", "version": "0.2.26", - "updatedAt": "2026-10-13T18:12:15Z", + "updatedAt": "2026-10-14T03:20:32Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/ergoveritas1-alt/certscore.ai/tree/HEAD/packages/certscore-mcp", @@ -22610,7 +22610,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/ai.connectmachine%2Fconnectmachine/versions/1.0.8", "description": "Manage your ConnectMachine contacts, networks, events, and digital business cards.", "version": "1.0.8", - "updatedAt": "2026-10-13T18:12:27Z", + "updatedAt": "2026-10-14T03:20:56Z", "metadata": { "readmeUrl": "https://github.com/connectmachine/mcp-server#readme", "repository": "https://github.com/connectmachine/mcp-server", @@ -22637,7 +22637,7 @@ "domain-registration" ], "version": "0.5.0", - "updatedAt": "2026-10-13T18:12:40Z", + "updatedAt": "2026-10-14T03:21:24Z", "metadata": { "readmeUrl": "https://github.com/CUSTOM-DOMAIN-APP/customdomain-mcp#readme", "repository": "https://github.com/CUSTOM-DOMAIN-APP/customdomain-mcp", @@ -22659,7 +22659,7 @@ "model-context-protocol" ], "version": "1.2.0", - "updatedAt": "2026-10-13T18:12:54Z", + "updatedAt": "2026-10-14T03:21:39Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/EmpirioLabs-AI/mcp#readme", @@ -22685,7 +22685,7 @@ "medianeria" ], "version": "1.0.4", - "updatedAt": "2026-10-13T18:13:00Z", + "updatedAt": "2026-10-14T03:21:53Z", "metadata": { "readmeUrl": "https://github.com/CMS87/epinu-mcp#readme", "repository": "https://github.com/CMS87/epinu-mcp", @@ -22700,7 +22700,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/ai.example4%2Fxmp4/versions/1.2.6", "description": "OSS libs in your stack, really used: source, tests, callers. C#, Java, TS, Python, Rust, PHP+.", "version": "1.2.6", - "updatedAt": "2026-10-13T18:13:06Z", + "updatedAt": "2026-10-14T03:22:23Z", "metadata": { "primaryLanguage": "HTML", "readmeUrl": "https://github.com/0ics-srls/lsai-xmp4.public#readme", @@ -22729,7 +22729,7 @@ "synthetic-panel" ], "version": "2.0.2", - "updatedAt": "2026-10-13T18:13:17Z", + "updatedAt": "2026-10-14T03:22:41Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/minds-ai-co/minds-mcp#readme", @@ -22755,7 +22755,7 @@ "dsh-plugin" ], "version": "0.9.0", - "updatedAt": "2026-10-13T18:13:26Z", + "updatedAt": "2026-10-14T03:22:57Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/puffo-ai/huddo-mcp#readme", @@ -22779,7 +22779,7 @@ "web-search" ], "version": "0.1.2", - "updatedAt": "2026-10-13T18:13:28Z", + "updatedAt": "2026-10-14T03:23:17Z", "metadata": { "primaryLanguage": "Shell", "readmeUrl": "https://github.com/keenableai/keenable-mcp#readme", @@ -22807,7 +22807,7 @@ "semantic-graph" ], "version": "0.8.6", - "updatedAt": "2026-10-13T18:13:40Z", + "updatedAt": "2026-10-14T03:23:35Z", "metadata": { "primaryLanguage": "Rust", "readmeUrl": "https://github.com/kinlab-ai/kin#readme", @@ -22835,7 +22835,7 @@ "claude-code" ], "version": "1.22.1", - "updatedAt": "2026-10-13T18:13:51Z", + "updatedAt": "2026-10-14T03:23:43Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/Nauro-AI/nauro#readme", @@ -22862,7 +22862,7 @@ "websearch" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:13:53Z", + "updatedAt": "2026-10-14T03:23:49Z", "metadata": { "readmeUrl": "https://github.com/parallel-web/search-mcp#readme", "repository": "https://github.com/parallel-web/search-mcp", @@ -22885,7 +22885,7 @@ "model-context-protocol" ], "version": "0.22.0", - "updatedAt": "2026-10-13T18:13:54Z", + "updatedAt": "2026-10-14T03:23:55Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/plori-ai/plori#readme", @@ -22913,7 +22913,7 @@ "instagram" ], "version": "1.11.0", - "updatedAt": "2026-10-13T18:13:56Z", + "updatedAt": "2026-10-14T03:24:01Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/posteverywhere/mcp#readme", @@ -22939,7 +22939,7 @@ "mcp-server" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:13:57Z", + "updatedAt": "2026-10-14T03:24:07Z", "metadata": { "readmeUrl": "https://github.com/qualityclouds/norma-mcp#readme", "repository": "https://github.com/qualityclouds/norma-mcp", @@ -22964,7 +22964,7 @@ "mcp-server" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:13:59Z", + "updatedAt": "2026-10-14T03:24:12Z", "metadata": { "readmeUrl": "https://github.com/streamfog/quillm-plugin#readme", "repository": "https://github.com/streamfog/quillm-plugin", @@ -22991,7 +22991,7 @@ "accounting" ], "version": "1.10.2", - "updatedAt": "2026-10-13T18:14:01Z", + "updatedAt": "2026-10-14T03:24:18Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/RoboFinSystems/robosystems#readme", @@ -23011,7 +23011,7 @@ "gemini-cli-extension" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:14:02Z", + "updatedAt": "2026-10-14T03:24:24Z", "metadata": { "primaryLanguage": "Rust", "readmeUrl": "https://github.com/aetherBytes/rokha-sdk#readme", @@ -23040,7 +23040,7 @@ "search-analytics" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:14:11Z", + "updatedAt": "2026-10-14T03:24:30Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/AndreyAzimov/searchconsole-ai#readme", @@ -23068,7 +23068,7 @@ "antigravity" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:14:23Z", + "updatedAt": "2026-10-14T03:24:36Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/Minh42/seomatic-mcp#readme", @@ -23091,7 +23091,7 @@ "project-management" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:14:24Z", + "updatedAt": "2026-10-14T03:24:41Z", "metadata": { "readmeUrl": "https://github.com/taskfolk/mcp#readme", "repository": "https://github.com/taskfolk/mcp", @@ -23118,7 +23118,7 @@ "retail" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:14:35Z", + "updatedAt": "2026-10-14T03:24:47Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/twelfth-ai/twelfth-mcp#readme", @@ -23146,7 +23146,7 @@ "agent-skills" ], "version": "0.6.8", - "updatedAt": "2026-10-13T18:14:41Z", + "updatedAt": "2026-10-14T03:24:53Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/vaaya-ai/vaaya-mcp#readme", @@ -23211,7 +23211,7 @@ "x402" ], "version": "1.3.0", - "updatedAt": "2026-10-13T18:15:11Z", + "updatedAt": "2026-10-14T03:25:04Z", "metadata": { "readmeUrl": "https://github.com/socialbitro/agentbit-mcp#readme", "repository": "https://github.com/socialbitro/agentbit-mcp", @@ -23226,7 +23226,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/app.causely%2Fcausely/versions/1.0.1", "description": "Causal reasoning for reliability: root cause, blast radius, and service health for agents.", "version": "1.0.1", - "updatedAt": "2026-10-13T18:15:14Z", + "updatedAt": "2026-10-14T03:25:10Z", "metadata": { "primaryLanguage": "Shell", "readmeUrl": "https://github.com/causely-oss/causely-client#readme", @@ -23243,7 +23243,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/app.clicon%2Flotus/versions/1.27.0", "description": "Measure how AI assistants cite your brand. Returns measured data and ready-to-apply fixes.", "version": "1.27.0", - "updatedAt": "2026-10-13T18:15:20Z", + "updatedAt": "2026-10-14T03:25:21Z", "metadata": { "readmeUrl": "https://github.com/martinendara/lotus-mcp#readme", "repository": "https://github.com/martinendara/lotus-mcp", @@ -23269,7 +23269,7 @@ "gemini-cli-extension" ], "version": "1.0.75", - "updatedAt": "2026-10-13T18:15:29Z", + "updatedAt": "2026-10-14T03:25:27Z", "metadata": { "readmeUrl": "https://github.com/desktop-commander/remote-desktop-commander#readme", "repository": "https://github.com/desktop-commander/remote-desktop-commander", @@ -23296,7 +23296,7 @@ "gemini-cli-extension" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:15:45Z", + "updatedAt": "2026-10-14T03:25:33Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/glifxyz/glif-mcp-server#readme", @@ -23313,7 +23313,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/app.lucid.mcp%2Flucid/versions/1.0.0", "description": "Lucid’s connector creates diagrams, searches, edits, shares, and retrieves docs to summarize.", "version": "1.0.0", - "updatedAt": "2026-10-13T18:16:02Z", + "updatedAt": "2026-10-14T03:25:43Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/lucidsoftware/lucid-mcp-server#readme", @@ -23337,7 +23337,7 @@ "twitter" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:16:17Z", + "updatedAt": "2026-10-14T03:25:49Z", "metadata": { "readmeUrl": "https://github.com/robinfaraj/postel-mcp#readme", "repository": "https://github.com/robinfaraj/postel-mcp", @@ -23364,7 +23364,7 @@ "websocket" ], "version": "0.6.0", - "updatedAt": "2026-10-13T18:16:35Z", + "updatedAt": "2026-10-14T03:25:55Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/pensados/sentinelx-cloud-core#readme", @@ -23444,7 +23444,7 @@ "social-insurance" ], "version": "1.3.0", - "updatedAt": "2026-10-13T18:18:40Z", + "updatedAt": "2026-10-14T03:26:06Z", "metadata": { "readmeUrl": "https://github.com/salvador-creator/clino-mcp#readme", "repository": "https://github.com/salvador-creator/clino-mcp", @@ -23465,14 +23465,14 @@ "readmeUrl": "https://github.com/chroma-core/chroma-mcp#readme", "repository": "https://github.com/chroma-core/chroma-mcp", "repositorySource": "github", - "stargazerCount": 600 + "stargazerCount": 599 } }, { "identifier": "urn:air:registry.modelcontextprotocol.io:cloud.dchub:mcp-server", "displayName": "DC Hub — Data Center Site Selection & Colocation: Electricity, Power Grid, Gas, Fiber", "type": "application/mcp-server+json", - "url": "https://api.mcp.github.com/v0.1/servers/cloud.dchub%2Fmcp-server/versions/2.12.36", + "url": "https://api.mcp.github.com/v0.1/servers/cloud.dchub%2Fmcp-server/versions/2.12.37", "description": "DCPI grid-power scores for 300+ markets, plus capacity to buy or lease; query and cite.", "tags": [ "ai-tools", @@ -23486,8 +23486,8 @@ "market-intelligence", "mcp" ], - "version": "2.12.36", - "updatedAt": "2026-10-13T18:19:02Z", + "version": "2.12.37", + "updatedAt": "2026-10-14T03:26:08Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/azmartone67/dchub-mcp-server#readme", @@ -23504,7 +23504,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/cloud.eresourcescheduler.app%2Feresource-scheduler/versions/1.0.0", "description": "Enterprise resource scheduling for optimal utilization and higher margins.", "version": "1.0.0", - "updatedAt": "2026-10-13T18:19:08Z", + "updatedAt": "2026-10-14T03:26:21Z", "metadata": { "readmeUrl": "https://github.com/enbraun-org/eRS-MCP#readme", "repository": "https://github.com/enbraun-org/eRS-MCP", @@ -23519,7 +23519,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/co.axiom%2Fmcp/versions/1.0.0", "description": "List datasets, schemas, run APL queries, and use prompts for exploration, anomalies, and monitoring.", "version": "1.0.0", - "updatedAt": "2026-10-13T18:19:13Z", + "updatedAt": "2026-10-14T03:26:39Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/axiomhq/mcp/tree/HEAD/apps/mcp", @@ -23535,7 +23535,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/co.flowleap%2Fflowleap/versions/1.0.1", "description": "EPO/USPTO search, citations, OCR, plus PATSTAT Portfolio Analytics, guarded SQL and Graph Analytics.", "version": "1.0.1", - "updatedAt": "2026-10-13T18:19:19Z", + "updatedAt": "2026-10-14T03:26:44Z", "metadata": { "readmeUrl": "https://github.com/flowleap-ai/flowleap-mcp#readme", "repository": "https://github.com/flowleap-ai/flowleap-mcp", @@ -23550,7 +23550,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/co.sofya%2Fsofya/versions/1.27.1", "description": "Web search, fetch, extract, and research for AI agents. Markdown output + AI-synthesized answers.", "version": "1.27.1", - "updatedAt": "2026-10-13T18:19:24Z", + "updatedAt": "2026-10-14T03:26:50Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/sofya-co/sofya-mcp#readme", @@ -23579,7 +23579,7 @@ "w2-staffing" ], "version": "1.7.2", - "updatedAt": "2026-10-13T18:19:36Z", + "updatedAt": "2026-10-14T03:27:05Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/tempguru-co/tempguru-mcp#readme", @@ -23648,7 +23648,7 @@ "model-context-protocol" ], "version": "0.3.1", - "updatedAt": "2026-10-13T18:19:47Z", + "updatedAt": "2026-10-14T03:27:24Z", "metadata": { "readmeUrl": "https://github.com/adsuploader/meta-ads-mcp#readme", "repository": "https://github.com/adsuploader/meta-ads-mcp", @@ -23663,7 +23663,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.agilitycms%2Fmcp-server/versions/2.6.0", "description": "An MCP server that provides access to Agility CMS. See https://mcp.agilitycms.com for more details.", "version": "2.6.0", - "updatedAt": "2026-10-13T18:19:49Z", + "updatedAt": "2026-10-14T03:27:29Z", "metadata": { "readmeUrl": "https://github.com/agility/mcp-server#readme", "repository": "https://github.com/agility/mcp-server", @@ -23689,7 +23689,7 @@ "model-context-protocol" ], "version": "1.8.5", - "updatedAt": "2026-10-13T18:19:59Z", + "updatedAt": "2026-10-14T03:27:35Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/aiapplyd/aiapplyd-mcp#readme", @@ -23718,7 +23718,7 @@ "mcp" ], "version": "2.1.2", - "updatedAt": "2026-10-13T18:20:05Z", + "updatedAt": "2026-10-14T03:27:41Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/na77tech-creator/aikstockdata#readme", @@ -23747,7 +23747,7 @@ "claude-code-plugin" ], "version": "0.7.0", - "updatedAt": "2026-10-13T18:20:07Z", + "updatedAt": "2026-10-14T03:27:47Z", "metadata": { "readmeUrl": "https://github.com/Airport-Lounge-List/mcp-server#readme", "repository": "https://github.com/Airport-Lounge-List/mcp-server", @@ -23765,7 +23765,7 @@ "gemini-cli-extension" ], "version": "0.1.2", - "updatedAt": "2026-10-13T18:20:12Z", + "updatedAt": "2026-10-14T03:27:52Z", "metadata": { "readmeUrl": "https://github.com/alfanestlabs/alfanest-relay#readme", "repository": "https://github.com/alfanestlabs/alfanest-relay", @@ -23786,13 +23786,13 @@ "mcp-server" ], "version": "0.18.0", - "updatedAt": "2026-10-13T18:20:17Z", + "updatedAt": "2026-10-14T03:27:58Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/apify/apify-mcp-server#readme", "repository": "https://github.com/apify/apify-mcp-server", "repositorySource": "github", - "stargazerCount": 10980 + "stargazerCount": 11067 } }, { @@ -23814,13 +23814,13 @@ "cursor" ], "version": "2.0.0", - "updatedAt": "2026-10-13T18:20:20Z", + "updatedAt": "2026-10-14T03:28:05Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/atlassian/atlassian-mcp-server#readme", "repository": "https://github.com/atlassian/atlassian-mcp-server", "repositorySource": "github", - "stargazerCount": 1090, + "stargazerCount": 1091, "websiteUrl": "https://support.atlassian.com/atlassian-rovo-mcp-server/docs/getting-started-with-the-atlassian-remote-mcp-server/" } }, @@ -23831,7 +23831,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.atom%2Fpremium-domains/versions/2.0.7", "description": "Search, appraise, trademark-check, and buy premium brandable domain names from Atom.com.", "version": "2.0.7", - "updatedAt": "2026-10-13T18:20:21Z", + "updatedAt": "2026-10-14T03:28:11Z", "metadata": { "readmeUrl": "https://github.com/atomdomains/atom-mcp-server#readme", "repository": "https://github.com/atomdomains/atom-mcp-server", @@ -23846,7 +23846,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.avalara%2Fatc/versions/1.0.1", "description": "Provides access to Avalara Tax Content: TTE configs, jobs, communications, lodging, autorental", "version": "1.0.1", - "updatedAt": "2026-10-13T18:20:25Z", + "updatedAt": "2026-10-14T03:28:16Z", "metadata": { "readmeUrl": "https://github.com/avadev/mcp#readme", "repository": "https://github.com/avadev/mcp", @@ -23862,7 +23862,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.avalara%2Favatax/versions/1.0.1", "description": "Access Avalara AvaTax API for tax calculation, transactions, nexus management, and compliance", "version": "1.0.1", - "updatedAt": "2026-10-13T18:20:29Z", + "updatedAt": "2026-10-14T03:28:22Z", "metadata": { "readmeUrl": "https://github.com/avadev/mcp#readme", "repository": "https://github.com/avadev/mcp", @@ -23878,7 +23878,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.avalara%2Fbl/versions/1.0.0", "description": "Provides access to Avalara Tax Registration and Business Licenses APIs for filings and registrations", "version": "1.0.0", - "updatedAt": "2026-10-13T18:20:30Z", + "updatedAt": "2026-10-14T03:28:27Z", "metadata": { "readmeUrl": "https://github.com/avadev/mcp#readme", "repository": "https://github.com/avadev/mcp", @@ -23894,7 +23894,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.avalara%2Fclassification/versions/1.0.0", "description": "Classify, validate & verify HS codes and access tariff compliance data for cross-border trade", "version": "1.0.0", - "updatedAt": "2026-10-13T18:20:34Z", + "updatedAt": "2026-10-14T03:28:33Z", "metadata": { "readmeUrl": "https://github.com/avadev/mcp#readme", "repository": "https://github.com/avadev/mcp", @@ -23910,7 +23910,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.avalara%2Fcross-border/versions/1.0.0", "description": "Cross-border duty-rate and Trade & Tariff content lookups with product compliance and restrictions", "version": "1.0.0", - "updatedAt": "2026-10-13T18:20:35Z", + "updatedAt": "2026-10-14T03:28:39Z", "metadata": { "readmeUrl": "https://github.com/avadev/mcp#readme", "repository": "https://github.com/avadev/mcp", @@ -23926,7 +23926,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.avalara%2Fdocs/versions/1.0.1", "description": "Provides access to Avalara developer documentation, integration guides, and code examples", "version": "1.0.1", - "updatedAt": "2026-10-13T18:20:36Z", + "updatedAt": "2026-10-14T03:28:44Z", "metadata": { "readmeUrl": "https://github.com/avadev/mcp#readme", "repository": "https://github.com/avadev/mcp", @@ -23942,7 +23942,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.avalara%2Felr/versions/1.0.0", "description": "Provides access to Avalara E-Invoicing and Live Reporting APIs for document statuses and compliance", "version": "1.0.0", - "updatedAt": "2026-10-13T18:20:39Z", + "updatedAt": "2026-10-14T03:28:50Z", "metadata": { "readmeUrl": "https://github.com/avadev/mcp#readme", "repository": "https://github.com/avadev/mcp", @@ -23958,7 +23958,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.avalara%2Freturns/versions/1.0.1", "description": "Provides access to Avalara Global Returns API for tax returns, filing calendars, and compliance data", "version": "1.0.1", - "updatedAt": "2026-10-13T18:20:41Z", + "updatedAt": "2026-10-14T03:28:55Z", "metadata": { "readmeUrl": "https://github.com/avadev/mcp#readme", "repository": "https://github.com/avadev/mcp", @@ -23986,7 +23986,7 @@ "travel" ], "version": "3.0.0", - "updatedAt": "2026-10-13T18:20:44Z", + "updatedAt": "2026-10-14T03:29:01Z", "metadata": { "readmeUrl": "https://github.com/AwardTravelFinder/mcp#readme", "repository": "https://github.com/AwardTravelFinder/mcp", @@ -24011,7 +24011,7 @@ "newsletter" ], "version": "0.1.0", - "updatedAt": "2026-10-13T18:20:48Z", + "updatedAt": "2026-10-14T03:29:07Z", "metadata": { "primaryLanguage": "Shell", "readmeUrl": "https://github.com/beehiiv/agents#readme", @@ -24028,7 +24028,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.bigdata%2Fbigdata-mcp/versions/1.2.1", "description": "Licensed, cited financial data for AI agents: news, filings, transcripts, research and tearsheets.", "version": "1.2.1", - "updatedAt": "2026-10-13T18:20:50Z", + "updatedAt": "2026-10-14T03:29:12Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/Bigdata-com/bigdata-plugins-marketplace#readme", @@ -24045,7 +24045,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.blackduck%2Fmcp-server/versions/1.1.8", "description": "AI-powered security scanning using Black Duck Signal for vulnerability detection.", "version": "1.1.8", - "updatedAt": "2026-10-13T18:20:51Z", + "updatedAt": "2026-10-14T03:29:18Z", "metadata": { "readmeUrl": "https://github.com/blackducksoftware/mcp-server#readme", "repository": "https://github.com/blackducksoftware/mcp-server", @@ -24060,7 +24060,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.breckenwander%2Ftravel-connector/versions/0.2.1", "description": "Search flights, hotels & experiences at all-in prices, then build a trip on breckenwander.com.", "version": "0.2.1", - "updatedAt": "2026-10-13T18:20:52Z", + "updatedAt": "2026-10-14T03:29:24Z", "metadata": { "primaryLanguage": "Dockerfile", "readmeUrl": "https://github.com/durwardjohnson/breckenwander-travel-connector#readme", @@ -24088,7 +24088,7 @@ "vscode" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:20:53Z", + "updatedAt": "2026-10-14T03:29:30Z", "metadata": { "readmeUrl": "https://github.com/cherry-it/cavyro-mcp#readme", "repository": "https://github.com/cherry-it/cavyro-mcp", @@ -24112,7 +24112,7 @@ "mcp" ], "version": "0.12.0", - "updatedAt": "2026-10-13T18:20:55Z", + "updatedAt": "2026-10-14T03:29:35Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/celigo/ai#readme", @@ -24139,7 +24139,7 @@ "web3" ], "version": "1.11.1", - "updatedAt": "2026-10-13T18:20:56Z", + "updatedAt": "2026-10-14T03:29:41Z", "metadata": { "readmeUrl": "https://github.com/chainstacklabs/mcp-server#readme", "repository": "https://github.com/chainstacklabs/mcp-server", @@ -24167,7 +24167,7 @@ "gemini-cli" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:20:58Z", + "updatedAt": "2026-10-14T03:29:47Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/Checkmarx/cx-agentic-ai#readme", @@ -24195,7 +24195,7 @@ "federated-sql" ], "version": "2.7.3", - "updatedAt": "2026-10-13T18:21:00Z", + "updatedAt": "2026-10-14T03:29:53Z", "metadata": { "primaryLanguage": "Dockerfile", "readmeUrl": "https://github.com/slotix/dbconvert-streams-public#readme", @@ -24224,7 +24224,7 @@ "audit-trail" ], "version": "0.1.6", - "updatedAt": "2026-10-13T18:21:05Z", + "updatedAt": "2026-10-14T03:29:59Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/decionis/agent-safe-pipeline/tree/HEAD/packages/commerce-mcp", @@ -24254,7 +24254,7 @@ "voice-ai" ], "version": "0.1.0", - "updatedAt": "2026-10-13T18:21:10Z", + "updatedAt": "2026-10-14T03:30:04Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/SkillfulAgents/dialmcp-connector#readme", @@ -24271,7 +24271,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.easyship%2Fmcp/versions/0.6.5", "description": "Connect Easyship to compare rates, create shipments, buy labels, and track packages globally.", "version": "0.6.5", - "updatedAt": "2026-10-13T18:21:11Z", + "updatedAt": "2026-10-14T03:30:10Z", "metadata": { "readmeUrl": "https://github.com/easyship/easyship-mcp-plugin#readme", "repository": "https://github.com/easyship/easyship-mcp-plugin", @@ -24285,13 +24285,13 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.figma.mcp%2Fmcp/versions/1.0.3", "description": "The Figma MCP server brings Figma design context directly into your AI workflow.", "version": "1.0.3", - "updatedAt": "2026-10-13T18:21:15Z", + "updatedAt": "2026-10-14T03:30:16Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/figma/mcp-server-guide#readme", "repository": "https://github.com/figma/mcp-server-guide", "repositorySource": "github", - "stargazerCount": 2069 + "stargazerCount": 2070 } }, { @@ -24313,7 +24313,7 @@ "travel" ], "version": "1.2.0", - "updatedAt": "2026-10-13T18:21:17Z", + "updatedAt": "2026-10-14T03:30:22Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/mtnrabi/google-flights-mcp#readme", @@ -24340,7 +24340,7 @@ "model-context-protocol" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:21:20Z", + "updatedAt": "2026-10-14T03:30:23Z", "metadata": { "readmeUrl": "https://github.com/Flight-Queue/mcp#readme", "repository": "https://github.com/Flight-Queue/mcp", @@ -24367,7 +24367,7 @@ "gemini-cli-extension" ], "version": "6.0.0", - "updatedAt": "2026-10-13T18:21:22Z", + "updatedAt": "2026-10-14T03:30:30Z", "metadata": { "readmeUrl": "https://github.com/FlightSeatmap/mcp#readme", "repository": "https://github.com/FlightSeatmap/mcp", @@ -24392,7 +24392,7 @@ "model-context-protocol" ], "version": "1.1.3", - "updatedAt": "2026-10-13T18:21:27Z", + "updatedAt": "2026-10-14T03:30:36Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/drknowhow/fluxdots-mcp#readme", @@ -24419,7 +24419,7 @@ "gemini-cli-extension" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:21:30Z", + "updatedAt": "2026-10-14T03:30:44Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/QuantumCoderSys/formasty-mcp#readme", @@ -24445,7 +24445,7 @@ "model-context-protocol" ], "version": "1.2.2", - "updatedAt": "2026-10-13T18:21:31Z", + "updatedAt": "2026-10-14T03:30:49Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/getappniche-com/mcp#readme", @@ -24470,7 +24470,7 @@ "gemini-cli-extension" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:21:37Z", + "updatedAt": "2026-10-14T03:30:55Z", "metadata": { "readmeUrl": "https://github.com/getclera/mcp#readme", "repository": "https://github.com/getclera/mcp", @@ -24486,7 +24486,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.getfirmament%2Ffirmament/versions/0.1.1", "description": "Your team's shared, verified knowledge for AI agents: ask what's true, record what you learn.", "version": "0.1.1", - "updatedAt": "2026-10-13T18:21:42Z", + "updatedAt": "2026-10-14T03:30:56Z", "metadata": { "readmeUrl": "https://github.com/spkenny455/firmament-mcp#readme", "repository": "https://github.com/spkenny455/firmament-mcp", @@ -24501,7 +24501,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.getguru%2Fmcp-server/versions/1.0.2", "description": "Guru MCP Server - Connect AI tools to your Guru knowledge base", "version": "1.0.2", - "updatedAt": "2026-10-13T18:21:44Z", + "updatedAt": "2026-10-14T03:31:06Z", "metadata": { "readmeUrl": "https://github.com/guruhq/remote-mcp-server#readme", "repository": "https://github.com/guruhq/remote-mcp-server", @@ -24517,7 +24517,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.getunblocked%2Funblocked-mcp/versions/1.0.2", "description": "Unblocked is the context layer for agentic software development.", "version": "1.0.2", - "updatedAt": "2026-10-13T18:21:45Z", + "updatedAt": "2026-10-14T03:31:12Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/unblocked/skills#readme", @@ -24543,7 +24543,7 @@ "wp-agent" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:21:51Z", + "updatedAt": "2026-10-14T03:31:19Z", "metadata": { "readmeUrl": "https://github.com/yaniv-fink/wp-agent-mcp#readme", "repository": "https://github.com/yaniv-fink/wp-agent-mcp", @@ -24569,7 +24569,7 @@ "modelcontextprotocol" ], "version": "1.2.1", - "updatedAt": "2026-10-13T18:21:52Z", + "updatedAt": "2026-10-14T03:31:26Z", "metadata": { "readmeUrl": "https://github.com/gleanwork/remote-mcp-server#readme", "repository": "https://github.com/gleanwork/remote-mcp-server", @@ -24597,7 +24597,7 @@ "real-estate" ], "version": "1.0.8", - "updatedAt": "2026-10-13T18:21:53Z", + "updatedAt": "2026-10-14T03:31:39Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/airbnb-mcp#readme", @@ -24626,7 +24626,7 @@ "mcp" ], "version": "1.0.3", - "updatedAt": "2026-10-13T18:21:55Z", + "updatedAt": "2026-10-14T03:31:54Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/amazon-mcp#readme", @@ -24655,7 +24655,7 @@ "model-context-protocol" ], "version": "1.0.3", - "updatedAt": "2026-10-13T18:21:56Z", + "updatedAt": "2026-10-14T03:32:05Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/bing-mcp#readme", @@ -24684,7 +24684,7 @@ "mcp" ], "version": "1.0.8", - "updatedAt": "2026-10-13T18:22:01Z", + "updatedAt": "2026-10-14T03:32:18Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/booking-mcp#readme", @@ -24713,7 +24713,7 @@ "model-context-protocol" ], "version": "1.0.7", - "updatedAt": "2026-10-13T18:22:03Z", + "updatedAt": "2026-10-14T03:32:29Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/duckduckgo-mcp#readme", @@ -24742,7 +24742,7 @@ "mcp" ], "version": "1.0.3", - "updatedAt": "2026-10-13T18:22:06Z", + "updatedAt": "2026-10-14T03:32:38Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/facebook-mcp#readme", @@ -24771,7 +24771,7 @@ "mcp-server" ], "version": "1.0.3", - "updatedAt": "2026-10-13T18:22:08Z", + "updatedAt": "2026-10-14T03:32:45Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/glassdoor-mcp#readme", @@ -24800,7 +24800,7 @@ "mcp" ], "version": "1.0.7", - "updatedAt": "2026-10-13T18:22:09Z", + "updatedAt": "2026-10-14T03:32:51Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/google-flights-mcp#readme", @@ -24829,7 +24829,7 @@ "model-context-protocol" ], "version": "1.0.3", - "updatedAt": "2026-10-13T18:22:11Z", + "updatedAt": "2026-10-14T03:32:56Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/google-images-mcp#readme", @@ -24858,7 +24858,7 @@ "model-context-protocol" ], "version": "1.0.7", - "updatedAt": "2026-10-13T18:22:17Z", + "updatedAt": "2026-10-14T03:33:02Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/google-maps-mcp#readme", @@ -24887,7 +24887,7 @@ "mcp" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:22:18Z", + "updatedAt": "2026-10-14T03:33:08Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/google-scholar-mcp#readme", @@ -24916,7 +24916,7 @@ "mcp-server" ], "version": "1.0.7", - "updatedAt": "2026-10-13T18:22:32Z", + "updatedAt": "2026-10-14T03:33:14Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/google-search-mcp#readme", @@ -24945,7 +24945,7 @@ "model-context-protocol" ], "version": "1.0.7", - "updatedAt": "2026-10-13T18:22:36Z", + "updatedAt": "2026-10-14T03:33:20Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/google-trends-mcp#readme", @@ -24974,7 +24974,7 @@ "amazon" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:22:47Z", + "updatedAt": "2026-10-14T03:33:27Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/hasdata-mcp#readme", @@ -25003,7 +25003,7 @@ "mcp" ], "version": "1.0.8", - "updatedAt": "2026-10-13T18:22:53Z", + "updatedAt": "2026-10-14T03:33:32Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/indeed-mcp#readme", @@ -25032,7 +25032,7 @@ "mcp" ], "version": "1.0.8", - "updatedAt": "2026-10-13T18:23:01Z", + "updatedAt": "2026-10-14T03:33:38Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/instagram-mcp#readme", @@ -25061,7 +25061,7 @@ "property-data" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:23:07Z", + "updatedAt": "2026-10-14T03:33:44Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/redfin-mcp#readme", @@ -25090,7 +25090,7 @@ "price-monitoring" ], "version": "1.0.3", - "updatedAt": "2026-10-13T18:23:10Z", + "updatedAt": "2026-10-14T03:33:50Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/shopify-mcp#readme", @@ -25119,7 +25119,7 @@ "tiktok" ], "version": "1.0.7", - "updatedAt": "2026-10-13T18:23:16Z", + "updatedAt": "2026-10-14T03:33:56Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/tiktok-mcp#readme", @@ -25148,7 +25148,7 @@ "price-monitoring" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:23:23Z", + "updatedAt": "2026-10-14T03:33:57Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/walmart-mcp#readme", @@ -25177,7 +25177,7 @@ "model-context-protocol" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:23:24Z", + "updatedAt": "2026-10-14T03:34:00Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/web-scraping-mcp#readme", @@ -25206,7 +25206,7 @@ "mcp-server" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:23:31Z", + "updatedAt": "2026-10-14T03:34:05Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/yellowpages-mcp#readme", @@ -25235,7 +25235,7 @@ "model-context-protocol" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:23:35Z", + "updatedAt": "2026-10-14T03:34:11Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/yelp-mcp#readme", @@ -25264,7 +25264,7 @@ "youtube-scraper" ], "version": "1.0.9", - "updatedAt": "2026-10-13T18:23:38Z", + "updatedAt": "2026-10-14T03:34:17Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/youtube-mcp#readme", @@ -25293,7 +25293,7 @@ "model-context-protocol" ], "version": "1.0.8", - "updatedAt": "2026-10-13T18:23:40Z", + "updatedAt": "2026-10-14T03:34:23Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/HasData/zillow-mcp#readme", @@ -25310,7 +25310,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.hitsteps%2Fanalytics-operations/versions/1.1.4", "description": "AI access to Hitsteps analytics, live visitors, uptime, goals, alerts, and chats.", "version": "1.1.4", - "updatedAt": "2026-10-13T18:23:44Z", + "updatedAt": "2026-10-14T03:34:29Z", "metadata": { "readmeUrl": "https://github.com/Hitsteps/MCP#readme", "repository": "https://github.com/Hitsteps/MCP", @@ -25337,7 +25337,7 @@ "technical-drawing" ], "version": "0.1.1", - "updatedAt": "2026-10-13T18:23:47Z", + "updatedAt": "2026-10-14T03:34:34Z", "metadata": { "primaryLanguage": "Dockerfile", "readmeUrl": "https://github.com/imnoo-team/drawing-converter-mcp#readme", @@ -25353,7 +25353,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.industry-lens%2Fmcp-public/versions/0.2.0", "description": "B2B SaaS competitor pricing changes, strategic moves, market landscapes, reports and comparisons.", "version": "0.2.0", - "updatedAt": "2026-10-13T18:23:54Z", + "updatedAt": "2026-10-14T03:34:40Z", "metadata": { "readmeUrl": "https://github.com/IndustryLensOp/industrylens-mcp-docs#readme", "repository": "https://github.com/IndustryLensOp/industrylens-mcp-docs", @@ -25377,7 +25377,7 @@ "model-context-protocol" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:24:01Z", + "updatedAt": "2026-10-14T03:34:41Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Kema-Studio/kema-invoice-mcp#readme", @@ -25393,7 +25393,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.limrun%2Fmcp/versions/0.3.2", "description": "Cloud iOS simulators and Android emulators your agent can create, drive, and throw away.", "version": "0.3.2", - "updatedAt": "2026-10-13T18:24:07Z", + "updatedAt": "2026-10-14T03:34:48Z", "metadata": { "readmeUrl": "https://github.com/limrun-inc/mcp#readme", "repository": "https://github.com/limrun-inc/mcp", @@ -25416,7 +25416,7 @@ "trading" ], "version": "0.9.0", - "updatedAt": "2026-10-13T18:24:09Z", + "updatedAt": "2026-10-14T03:34:53Z", "metadata": { "primaryLanguage": "Rust", "readmeUrl": "https://github.com/longbridge/longbridge-mcp#readme", @@ -25433,7 +25433,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.maatsii%2Flinreg/versions/1.5.2", "description": "Live LinReg fan charts, 64-setup playbook, 11-section MTF TA. Remote MCP, no API key.", "version": "1.5.2", - "updatedAt": "2026-10-13T18:24:21Z", + "updatedAt": "2026-10-14T03:34:59Z", "metadata": { "readmeUrl": "https://github.com/BL3IP/maatsii-cursor-plugin#readme", "repository": "https://github.com/BL3IP/maatsii-cursor-plugin", @@ -25451,7 +25451,7 @@ "gemini-cli-extension" ], "version": "1.0.3", - "updatedAt": "2026-10-13T18:24:25Z", + "updatedAt": "2026-10-14T03:35:05Z", "metadata": { "readmeUrl": "https://github.com/mablhq/mabl-mcp-server#readme", "repository": "https://github.com/mablhq/mabl-mcp-server", @@ -25478,7 +25478,7 @@ "model-context-protocol" ], "version": "1.0.3", - "updatedAt": "2026-10-13T18:24:26Z", + "updatedAt": "2026-10-14T03:35:11Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/macfax/macfax-mcp#readme", @@ -25504,7 +25504,7 @@ "gemini-cli-extension" ], "version": "1.1.1", - "updatedAt": "2026-10-13T18:24:27Z", + "updatedAt": "2026-10-14T03:35:16Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/anrawool/mailrith-agent-platform/tree/HEAD/packages/mcp-server", @@ -25531,7 +25531,7 @@ "streamable-http" ], "version": "1.0.5", - "updatedAt": "2026-10-13T18:24:30Z", + "updatedAt": "2026-10-14T03:35:22Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Albretsen/MCPEmails#readme", @@ -25556,7 +25556,7 @@ "persistent-memory" ], "version": "1.3.2", - "updatedAt": "2026-10-13T18:24:32Z", + "updatedAt": "2026-10-14T03:35:28Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/gpitrella/memxus-remote-mcp#readme", @@ -25572,14 +25572,14 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.microsoft%2Fazure/versions/3.0.0-beta.48", "description": "All Azure MCP tools to create a seamless connection between AI agents and Azure services.", "version": "3.0.0-beta.48", - "updatedAt": "2026-10-13T18:24:39Z", + "updatedAt": "2026-10-14T03:35:34Z", "metadata": { "primaryLanguage": "C#", "readmeUrl": "https://github.com/microsoft/mcp/tree/HEAD/servers/Azure.Mcp.Server", "repository": "https://github.com/microsoft/mcp", "repositorySource": "github", "repositorySubfolder": "servers/Azure.Mcp.Server", - "stargazerCount": 3769, + "stargazerCount": 3771, "websiteUrl": "https://github.com/microsoft/mcp/tree/main/servers/Azure.Mcp.Server" } }, @@ -25590,14 +25590,14 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.microsoft%2Fmicrosoft-fabric/versions/1.4.0", "description": "MCP tools for interacting with Microsoft Fabric", "version": "1.4.0", - "updatedAt": "2026-10-13T18:24:42Z", + "updatedAt": "2026-10-14T03:35:40Z", "metadata": { "primaryLanguage": "C#", "readmeUrl": "https://github.com/microsoft/mcp/tree/HEAD/servers/Fabric.Mcp.Server", "repository": "https://github.com/microsoft/mcp", "repositorySource": "github", "repositorySubfolder": "servers/Fabric.Mcp.Server", - "stargazerCount": 3769, + "stargazerCount": 3771, "websiteUrl": "https://github.com/microsoft/mcp/tree/main/servers/Fabric.Mcp.Server" } }, @@ -25608,7 +25608,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.microsoft%2Fnuget/versions/1.4.16", "description": "A Model Context Protocol (MCP) server for NuGet.", "version": "1.4.16", - "updatedAt": "2026-10-13T18:24:46Z", + "updatedAt": "2026-10-14T03:35:42Z", "metadata": { "primaryLanguage": "HTML", "readmeUrl": "https://github.com/NuGet/Home/tree/HEAD/mcp", @@ -25625,7 +25625,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.microsoft%2Fpowerbi-modeling-mcp/versions/1.0.0", "description": "The Power BI Authoring MCP server lets an AI agent create and change Power BI semantic models.", "version": "1.0.0", - "updatedAt": "2026-10-13T18:24:54Z", + "updatedAt": "2026-10-14T03:35:48Z", "metadata": { "readmeUrl": "https://github.com/microsoft/powerbi-modeling-mcp.git#readme", "repository": "https://github.com/microsoft/powerbi-modeling-mcp.git", @@ -25640,7 +25640,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.microsoft%2Fsentinel-data-exploration/versions/1.0.1", "description": "Find relevant security data from Sentinel data lake for building effective agents. More:aka.ms/s/de", "version": "1.0.1", - "updatedAt": "2026-10-13T18:24:56Z", + "updatedAt": "2026-10-14T03:35:54Z", "metadata": { "readmeUrl": "https://github.com/microsoft/sentinel-data-exploration-mcp#readme", "repository": "https://github.com/microsoft/sentinel-data-exploration-mcp", @@ -25659,7 +25659,7 @@ "mcp-server" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:25:00Z", + "updatedAt": "2026-10-14T03:35:59Z", "metadata": { "readmeUrl": "https://github.com/mobbin/mobbin-mcp-server#readme", "repository": "https://github.com/mobbin/mobbin-mcp-server", @@ -25681,7 +25681,7 @@ "monday" ], "version": "0.0.1", - "updatedAt": "2026-10-13T18:25:07Z", + "updatedAt": "2026-10-14T03:36:05Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/mondaycom/mcp#readme", @@ -25704,7 +25704,7 @@ "sports-betting" ], "version": "1.4.5", - "updatedAt": "2026-10-13T18:25:10Z", + "updatedAt": "2026-10-14T03:36:12Z", "metadata": { "readmeUrl": "https://github.com/jessejohnsohn/negativeev-mcp#readme", "repository": "https://github.com/jessejohnsohn/negativeev-mcp", @@ -25731,7 +25731,7 @@ "federated-search" ], "version": "1.2.1", - "updatedAt": "2026-10-13T18:25:11Z", + "updatedAt": "2026-10-14T03:36:18Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/neuronto/agentic-resource-discovery#readme", @@ -25747,8 +25747,17 @@ "type": "application/mcp-server+json", "url": "https://api.mcp.github.com/v0.1/servers/com.nitrosend%2Fnitrosend/versions/0.8.2", "description": "AI-native email marketing. Campaigns, automations, transactional, contacts, and analytics.", + "tags": [ + "ai-agent", + "email-marketing", + "marketing-automation", + "mcp", + "model-context-protocol", + "nitrosend", + "stdio-bridge" + ], "version": "0.8.2", - "updatedAt": "2026-10-13T18:25:13Z", + "updatedAt": "2026-10-14T03:36:23Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/nitrosend/mcp#readme", @@ -25762,7 +25771,7 @@ "identifier": "urn:air:registry.modelcontextprotocol.io:com.offlineprotocol:cli", "displayName": "Offline Protocol", "type": "application/mcp-server+json", - "url": "https://api.mcp.github.com/v0.1/servers/com.offlineprotocol%2Fcli/versions/0.2.6", + "url": "https://api.mcp.github.com/v0.1/servers/com.offlineprotocol%2Fcli/versions/0.2.7", "description": "Find Offline Protocol SDK packages, read integration guides, plan and scaffold local apps.", "tags": [ "claude-code", @@ -25773,8 +25782,8 @@ "mcp", "offline-protocol" ], - "version": "0.2.6", - "updatedAt": "2026-10-13T18:25:16Z", + "version": "0.2.7", + "updatedAt": "2026-10-14T03:36:30Z", "metadata": { "readmeUrl": "https://github.com/Offline-Protocol/offline-protocol-agent-plugins#readme", "repository": "https://github.com/Offline-Protocol/offline-protocol-agent-plugins", @@ -25798,7 +25807,7 @@ "offline-protocol" ], "version": "0.2.7", - "updatedAt": "2026-10-13T18:25:19Z", + "updatedAt": "2026-10-14T03:36:36Z", "metadata": { "readmeUrl": "https://github.com/Offline-Protocol/offline-protocol-agent-plugins#readme", "repository": "https://github.com/Offline-Protocol/offline-protocol-agent-plugins", @@ -25813,7 +25822,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.opslevel%2Fmcp/versions/0.1.1", "description": "Query your OpsLevel internal developer portal: catalog, maturity data, and tech docs.", "version": "0.1.1", - "updatedAt": "2026-10-13T18:25:20Z", + "updatedAt": "2026-10-14T03:36:42Z", "metadata": { "readmeUrl": "https://github.com/OpsLevel/opslevel-mcp-remote#readme", "repository": "https://github.com/OpsLevel/opslevel-mcp-remote", @@ -25828,7 +25837,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.pageree%2Flanding-pages/versions/1.0.1", "description": "Build, publish, capture leads from, measure and improve landing pages from your AI assistant.", "version": "1.0.1", - "updatedAt": "2026-10-13T18:25:23Z", + "updatedAt": "2026-10-14T03:36:48Z", "metadata": { "readmeUrl": "https://github.com/Pageree/mcp-server#readme", "repository": "https://github.com/Pageree/mcp-server", @@ -25852,7 +25861,7 @@ "model-context-protocol" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:25:27Z", + "updatedAt": "2026-10-14T03:36:53Z", "metadata": { "readmeUrl": "https://github.com/Built-AI/prism-mcp#readme", "repository": "https://github.com/Built-AI/prism-mcp", @@ -25879,7 +25888,7 @@ "stock-photos" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:25:29Z", + "updatedAt": "2026-10-14T03:36:59Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/Pexafy/pexafy-mcp#readme", @@ -25907,7 +25916,7 @@ "copilot" ], "version": "2.13.0", - "updatedAt": "2026-10-13T18:25:30Z", + "updatedAt": "2026-10-14T03:37:05Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/postmanlabs/postman-mcp-server#readme", @@ -25924,7 +25933,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.powmcp%2Fcaption-file-check/versions/0.3.3", "description": "Parse WebVTT, SRT, or TTML for conformance, timing, overlaps, line length, and reading speed.", "version": "0.3.3", - "updatedAt": "2026-10-13T18:25:32Z", + "updatedAt": "2026-10-14T03:37:11Z", "metadata": { "readmeUrl": "https://github.com/powmcp/mcp-server-guide#readme", "repository": "https://github.com/powmcp/mcp-server-guide", @@ -25951,7 +25960,7 @@ "polymarket" ], "version": "1.25.0", - "updatedAt": "2026-10-13T18:25:36Z", + "updatedAt": "2026-10-14T03:37:21Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/predictionmarketspicks/mcp#readme", @@ -25967,7 +25976,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.prominara%2Fprominara/versions/1.1.6", "description": "GEO platform: track brand visibility, citations, sources and measurement verdicts across AI answers.", "version": "1.1.6", - "updatedAt": "2026-10-13T18:25:40Z", + "updatedAt": "2026-10-14T03:37:27Z", "metadata": { "readmeUrl": "https://github.com/nseara/prominara-mcp#readme", "repository": "https://github.com/nseara/prominara-mcp", @@ -25982,7 +25991,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.publora%2Fmcp-server/versions/1.1.1", "description": "Schedule and publish to 10 social platforms: LinkedIn, X, Instagram, TikTok, YouTube, and more.", "version": "1.1.1", - "updatedAt": "2026-10-13T18:25:43Z", + "updatedAt": "2026-10-14T03:37:34Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/publora/mcp-server#readme", @@ -26011,7 +26020,7 @@ "mcp" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:25:44Z", + "updatedAt": "2026-10-14T03:37:36Z", "metadata": { "readmeUrl": "https://github.com/qualityclouds/qualityclouds#readme", "repository": "https://github.com/qualityclouds/qualityclouds", @@ -26032,7 +26041,7 @@ "model-context-protocol" ], "version": "3.2.0", - "updatedAt": "2026-10-13T18:25:52Z", + "updatedAt": "2026-10-14T03:37:42Z", "metadata": { "readmeUrl": "https://github.com/Relvato/relvato-mcp#readme", "repository": "https://github.com/Relvato/relvato-mcp", @@ -26057,7 +26066,7 @@ "review-management" ], "version": "1.1.1", - "updatedAt": "2026-10-13T18:26:01Z", + "updatedAt": "2026-10-14T03:37:48Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/reputemap-com/mcp#readme", @@ -26085,7 +26094,7 @@ "mobile-design" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:26:13Z", + "updatedAt": "2026-10-14T03:37:54Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/screensdesign-com/screensdesign-agent-skill#readme", @@ -26112,7 +26121,7 @@ "website-screenshot" ], "version": "0.1.1", - "updatedAt": "2026-10-13T18:26:21Z", + "updatedAt": "2026-10-14T03:37:57Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/screenshotscout/screenshotscout-mcp#readme", @@ -26135,7 +26144,7 @@ "seo" ], "version": "3.1.2", - "updatedAt": "2026-10-13T18:26:22Z", + "updatedAt": "2026-10-14T03:38:06Z", "metadata": { "readmeUrl": "https://github.com/eduardmur/searcherries-mcp#readme", "repository": "https://github.com/eduardmur/searcherries-mcp", @@ -26150,7 +26159,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.searchfragments%2Fsearch-fragments/versions/0.2.5", "description": "Pieces together films, shows, songs, books, quotes, places and studies from remembered fragments.", "version": "0.2.5", - "updatedAt": "2026-10-13T18:26:38Z", + "updatedAt": "2026-10-14T03:38:13Z", "metadata": { "readmeUrl": "https://github.com/Searchfragments/search-fragments-mcp#readme", "repository": "https://github.com/Searchfragments/search-fragments-mcp", @@ -26165,7 +26174,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.sherweb%2Fplatform/versions/1.52.10", "description": "Sherweb Platform MCP server to manage subscriptions and orders. Use OpenID Connect to authenticate.", "version": "1.52.10", - "updatedAt": "2026-10-13T18:26:39Z", + "updatedAt": "2026-10-14T03:38:18Z", "metadata": { "readmeUrl": "https://github.com/sherweb/platform-mcp#readme", "repository": "https://github.com/sherweb/platform-mcp", @@ -26177,7 +26186,7 @@ "identifier": "urn:air:registry.modelcontextprotocol.io:com.shipstatic:mcp", "displayName": "ShipStatic", "type": "application/mcp-server+json", - "url": "https://api.mcp.github.com/v0.1/servers/com.shipstatic%2Fmcp/versions/2.4.2", + "url": "https://api.mcp.github.com/v0.1/servers/com.shipstatic%2Fmcp/versions/2.5.0", "description": "Deploy static websites from AI agents. Free at mcp.shipstatic.com — no install, no signup.", "tags": [ "ai", @@ -26191,8 +26200,8 @@ "static-hosting", "static-site" ], - "version": "2.4.2", - "updatedAt": "2026-10-13T18:26:45Z", + "version": "2.5.0", + "updatedAt": "2026-10-14T03:38:19Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/shipstatic/mcp#readme", @@ -26221,7 +26230,7 @@ "empty-legs" ], "version": "1.0.3", - "updatedAt": "2026-10-13T18:26:46Z", + "updatedAt": "2026-10-14T03:38:26Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/sky-access/skyaccess-mcp#readme", @@ -26250,7 +26259,7 @@ "swagger" ], "version": "0.42.0", - "updatedAt": "2026-10-13T18:27:01Z", + "updatedAt": "2026-10-14T03:38:31Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/SmartBear/smartbear-mcp#readme", @@ -26278,7 +26287,7 @@ "swagger" ], "version": "0.33.0", - "updatedAt": "2026-10-13T18:27:12Z", + "updatedAt": "2026-10-14T03:38:34Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/SmartBear/smartbear-mcp#readme", @@ -26294,7 +26303,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.sonatype%2Fdependency-management-mcp-server/versions/1.0.2", "description": "Sonatype component intelligence: versions, security analysis, and Trust Score recommendations", "version": "1.0.2", - "updatedAt": "2026-10-13T18:27:21Z", + "updatedAt": "2026-10-14T03:38:36Z", "metadata": { "readmeUrl": "https://github.com/sonatype/dependency-management-mcp-server#readme", "repository": "https://github.com/sonatype/dependency-management-mcp-server", @@ -26312,7 +26321,7 @@ "soracom" ], "version": "1.1.5", - "updatedAt": "2026-10-13T18:27:27Z", + "updatedAt": "2026-10-14T03:38:37Z", "metadata": { "readmeUrl": "https://github.com/soracom/mcp/tree/HEAD/servers/knowledge", "repository": "https://github.com/soracom/mcp", @@ -26329,7 +26338,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.stackhawk%2Fstackhawk/versions/1.1.1", "description": "An MCP server that provides interaction with StackHawk's security scanning platform.", "version": "1.1.1", - "updatedAt": "2026-10-13T18:27:43Z", + "updatedAt": "2026-10-14T03:38:38Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/stackhawk/stackhawk-mcp#readme", @@ -26345,7 +26354,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.stackoverflow.mcp%2Fmcp/versions/1.1.3", "description": "Access Stack Overflow's trusted and verified technical questions and answers.", "version": "1.1.3", - "updatedAt": "2026-10-13T18:27:57Z", + "updatedAt": "2026-10-14T03:38:40Z", "metadata": { "readmeUrl": "https://github.com/StackExchange/Stack-MCP#readme", "repository": "https://github.com/StackExchange/Stack-MCP", @@ -26370,13 +26379,13 @@ "gemini-cli-extension" ], "version": "0.2.4", - "updatedAt": "2026-10-13T18:27:58Z", + "updatedAt": "2026-10-14T03:38:41Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/stripe/agent-toolkit#readme", "repository": "https://github.com/stripe/agent-toolkit", "repositorySource": "github", - "stargazerCount": 1930 + "stargazerCount": 1935 } }, { @@ -26386,14 +26395,14 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.supabase%2Fmcp/versions/0.13.0", "description": "MCP server for interacting with the Supabase platform", "version": "0.13.0", - "updatedAt": "2026-10-13T18:28:08Z", + "updatedAt": "2026-10-14T03:38:42Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/supabase/mcp/tree/HEAD/packages/mcp-server-supabase", "repository": "https://github.com/supabase/mcp", "repositorySource": "github", "repositorySubfolder": "packages/mcp-server-supabase", - "stargazerCount": 2948, + "stargazerCount": 2949, "websiteUrl": "https://supabase.com/mcp" } }, @@ -26404,7 +26413,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.tallyfy%2Fmcp-server/versions/1.2.0", "description": "Automate tasks, processes, and approvals with AI.", "version": "1.2.0", - "updatedAt": "2026-10-13T18:28:09Z", + "updatedAt": "2026-10-14T03:38:44Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/tallyfy/mcp-public#readme", @@ -26421,7 +26430,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.theresanaiforthat%2Ftaaft/versions/1.0.0", "description": "Search TAAFT for AI tools and retrieve public tool details.", "version": "1.0.0", - "updatedAt": "2026-10-13T18:28:12Z", + "updatedAt": "2026-10-14T03:38:47Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/taaft/mcp#readme", @@ -26449,7 +26458,7 @@ "investing" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:28:26Z", + "updatedAt": "2026-10-14T03:38:48Z", "metadata": { "readmeUrl": "https://github.com/Truthifi/truthifi-mcp#readme", "repository": "https://github.com/Truthifi/truthifi-mcp", @@ -26474,7 +26483,7 @@ "reddit" ], "version": "1.1.0", - "updatedAt": "2026-10-13T18:28:37Z", + "updatedAt": "2026-10-14T03:38:49Z", "metadata": { "readmeUrl": "https://github.com/daniel-ddtech/commentscraper-cli#readme", "repository": "https://github.com/daniel-ddtech/commentscraper-cli", @@ -26499,7 +26508,7 @@ "social-media-agents" ], "version": "0.10.0", - "updatedAt": "2026-10-13T18:28:38Z", + "updatedAt": "2026-10-14T03:38:54Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Upload-Post/upload-post-mcp#readme", @@ -26524,7 +26533,7 @@ "web-scraping" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:28:40Z", + "updatedAt": "2026-10-14T03:38:55Z", "metadata": { "readmeUrl": "https://github.com/Upscrape/upscrape-mcp#readme", "repository": "https://github.com/Upscrape/upscrape-mcp", @@ -26540,7 +26549,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.vercel%2Fvercel-mcp/versions/0.0.3", "description": "An MCP server for Vercel", "version": "0.0.3", - "updatedAt": "2026-10-13T18:28:53Z", + "updatedAt": "2026-10-14T03:38:57Z", "metadata": { "readmeUrl": "https://github.com/vercel/vercel-mcp-overview#readme", "repository": "https://github.com/vercel/vercel-mcp-overview", @@ -26562,7 +26571,7 @@ "business-critical-yes" ], "version": "2.0.0", - "updatedAt": "2026-10-13T18:28:59Z", + "updatedAt": "2026-10-14T03:38:58Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/webflow/mcp-server#readme", @@ -26578,7 +26587,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.webinarignition%2Fmcp/versions/1.0.9", "description": "Tell it your webinar topic in one sentence — no sign-in. It builds the WordPress webinar.", "version": "1.0.9", - "updatedAt": "2026-10-13T18:29:01Z", + "updatedAt": "2026-10-14T03:39:00Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/Tobias-Conrad/webinarignition-mcp#readme", @@ -26594,7 +26603,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/com.wix%2Fmcp/versions/1.0.2", "description": "A Model Context Protocol server for Wix AI tools", "version": "1.0.2", - "updatedAt": "2026-10-13T18:29:02Z", + "updatedAt": "2026-10-14T03:39:02Z", "metadata": { "readmeUrl": "https://github.com/wix/wix-mcp#readme", "repository": "https://github.com/wix/wix-mcp", @@ -26613,7 +26622,7 @@ "dax" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:29:03Z", + "updatedAt": "2026-10-14T03:39:06Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/workos/skills/tree/HEAD/mcp", @@ -26643,7 +26652,7 @@ "wordpress-mcp" ], "version": "2.0.0", - "updatedAt": "2026-10-13T18:29:04Z", + "updatedAt": "2026-10-14T03:39:07Z", "metadata": { "readmeUrl": "https://github.com/yaniv-fink/wpwriter-mcp#readme", "repository": "https://github.com/yaniv-fink/wpwriter-mcp", @@ -26669,7 +26678,7 @@ "privacy" ], "version": "1.0.3", - "updatedAt": "2026-10-13T18:29:06Z", + "updatedAt": "2026-10-14T03:39:12Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/Wuniq/wuniq-mcp#readme", @@ -26697,7 +26706,7 @@ "twitter-api-alternative" ], "version": "2.6.62", - "updatedAt": "2026-10-13T18:29:20Z", + "updatedAt": "2026-10-14T03:39:14Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/Xquik-dev/x-twitter-scraper#readme", @@ -26732,7 +26741,7 @@ "readmeUrl": "https://github.com/CoplayDev/unity-mcp#readme", "repository": "https://github.com/CoplayDev/unity-mcp", "repositorySource": "github", - "stargazerCount": 14904 + "stargazerCount": 14919 } }, { @@ -26742,7 +26751,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/de.analytixus%2Fanalytixus-mcp/versions/0.8.5", "description": "Analytixus DnAML repository access (read/write nodes, tree navigation, search) via MCP.", "version": "0.8.5", - "updatedAt": "2026-10-13T18:29:39Z", + "updatedAt": "2026-10-14T03:39:15Z", "metadata": { "readmeUrl": "https://github.com/andyloewen78/analytixus-mcp#readme", "repository": "https://github.com/andyloewen78/analytixus-mcp", @@ -26757,7 +26766,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/dev.cubic%2Fcubic/versions/1.0.1", "description": "Triage cubic AI code review findings, start PR reviews, and read wikis, scans, and team learnings.", "version": "1.0.1", - "updatedAt": "2026-10-13T18:29:42Z", + "updatedAt": "2026-10-14T03:39:16Z", "metadata": { "readmeUrl": "https://github.com/mrge-io/cubic-mcp#readme", "repository": "https://github.com/mrge-io/cubic-mcp", @@ -26782,7 +26791,7 @@ "vibe-coding" ], "version": "0.1.3", - "updatedAt": "2026-10-13T18:29:54Z", + "updatedAt": "2026-10-14T03:39:18Z", "metadata": { "readmeUrl": "https://github.com/lovablelabs/mcp#readme", "repository": "https://github.com/lovablelabs/mcp", @@ -26808,7 +26817,7 @@ "model-context-protocol" ], "version": "0.13.0", - "updatedAt": "2026-10-13T18:30:29Z", + "updatedAt": "2026-10-14T03:39:19Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/mailkite/mailkite-mcp#readme", @@ -26835,7 +26844,7 @@ "presentations" ], "version": "5.9.0", - "updatedAt": "2026-10-13T18:31:04Z", + "updatedAt": "2026-10-14T03:39:20Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/smartdatabrokers/slideforge-mcp#readme", @@ -26851,7 +26860,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/dev.svelte%2Fmcp/versions/0.1.26", "description": "The official Svelte MCP server providing docs and autofixing tools for Svelte development", "version": "0.1.26", - "updatedAt": "2026-10-13T18:31:33Z", + "updatedAt": "2026-10-14T03:39:21Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/sveltejs/ai-tools/tree/HEAD/packages/mcp-stdio", @@ -26877,7 +26886,7 @@ "seo" ], "version": "0.1.4", - "updatedAt": "2026-10-13T18:32:07Z", + "updatedAt": "2026-10-14T03:39:23Z", "metadata": { "readmeUrl": "https://github.com/sultanlive/vibeseo-mcp#readme", "repository": "https://github.com/sultanlive/vibeseo-mcp", @@ -26942,7 +26951,7 @@ "spf" ], "version": "1.0.6", - "updatedAt": "2026-10-13T18:32:34Z", + "updatedAt": "2026-10-14T03:39:27Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/palisadeemail/palisade-mcp#readme", @@ -26958,7 +26967,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/eu.ansvar%2Fgateway/versions/1.0.b661c6dc", "description": "Cited EU & global law, regulations & security frameworks via Ansvar Gateway. OAuth, free + paid.", "version": "1.0.b661c6dc", - "updatedAt": "2026-10-13T18:32:36Z", + "updatedAt": "2026-10-14T03:39:28Z", "metadata": { "readmeUrl": "https://github.com/Ansvar-Systems/ansvar-gateway#readme", "repository": "https://github.com/Ansvar-Systems/ansvar-gateway", @@ -26986,7 +26995,7 @@ "typescript" ], "version": "1.19.1", - "updatedAt": "2026-10-13T18:32:38Z", + "updatedAt": "2026-10-14T03:39:30Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/malinoto/tracepass-mcp-server#readme", @@ -27021,7 +27030,7 @@ "readmeUrl": "https://github.com/firecrawl/firecrawl-mcp-server#readme", "repository": "https://github.com/firecrawl/firecrawl-mcp-server", "repositorySource": "github", - "stargazerCount": 7595 + "stargazerCount": 7597 } }, { @@ -27043,7 +27052,7 @@ "deepseek" ], "version": "1.8.4", - "updatedAt": "2026-10-13T18:32:46Z", + "updatedAt": "2026-10-14T03:39:31Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/TheBestCo/bestprice-mcp#readme", @@ -27066,7 +27075,7 @@ "voice-agents" ], "version": "1.2.0", - "updatedAt": "2026-10-13T18:32:48Z", + "updatedAt": "2026-10-14T03:39:33Z", "metadata": { "primaryLanguage": "HTML", "readmeUrl": "https://github.com/saaslabsco/justcall-mcp-server#readme", @@ -27114,7 +27123,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.aaly%2Faaly/versions/1.0.3", "description": "Build a full-stack app from Claude, Cursor, and more — Aaly is the backend API.", "version": "1.0.3", - "updatedAt": "2026-10-13T18:32:55Z", + "updatedAt": "2026-10-14T03:39:34Z", "metadata": { "readmeUrl": "https://github.com/candysiva/cursor-aaly-plugin#readme", "repository": "https://github.com/candysiva/cursor-aaly-plugin", @@ -27141,7 +27150,7 @@ "structured-data-extraction" ], "version": "1.8.0", - "updatedAt": "2026-10-13T18:32:57Z", + "updatedAt": "2026-10-14T03:39:35Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/RapierCraft/alterlab-mcp-server#readme", @@ -27168,7 +27177,7 @@ "social-media-scheduler" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:33:00Z", + "updatedAt": "2026-10-14T03:39:36Z", "metadata": { "primaryLanguage": "Shell", "readmeUrl": "https://github.com/iker-gonzalez/antwork-skills#readme", @@ -27196,7 +27205,7 @@ "news-api" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:33:02Z", + "updatedAt": "2026-10-14T03:39:38Z", "metadata": { "readmeUrl": "https://github.com/apitube/news-api-mcp#readme", "repository": "https://github.com/apitube/news-api-mcp", @@ -27223,12 +27232,12 @@ "design-system" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:33:04Z", + "updatedAt": "2026-10-14T03:39:40Z", "metadata": { "readmeUrl": "https://github.com/Appllama/appllama-skills#readme", "repository": "https://github.com/Appllama/appllama-skills", "repositorySource": "github", - "stargazerCount": 2803, + "stargazerCount": 2826, "websiteUrl": "https://appllama.io/mcp" } }, @@ -27246,7 +27255,7 @@ "mcp-server" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:33:06Z", + "updatedAt": "2026-10-14T03:39:41Z", "metadata": { "primaryLanguage": "Shell", "readmeUrl": "https://github.com/BlogSEO-io/blogseo-agent-plugin#readme", @@ -27274,7 +27283,7 @@ "context" ], "version": "0.5.35", - "updatedAt": "2026-10-13T18:33:08Z", + "updatedAt": "2026-10-14T03:39:42Z", "metadata": { "primaryLanguage": "Rust", "readmeUrl": "https://github.com/contextstream/mcp-server#readme", @@ -27303,7 +27312,7 @@ "kubernetes" ], "version": "1.0.2", - "updatedAt": "2026-10-13T18:33:11Z", + "updatedAt": "2026-10-14T03:39:45Z", "metadata": { "primaryLanguage": "Shell", "readmeUrl": "https://github.com/controlplane-com/ai-plugin#readme", @@ -27328,7 +27337,7 @@ "agent-skills" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:33:12Z", + "updatedAt": "2026-10-14T03:39:46Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/cypress-io/ai-toolkit#readme", @@ -27356,7 +27365,7 @@ "x402" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:33:14Z", + "updatedAt": "2026-10-14T03:39:47Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/webmilmind1/deskcrew-mcp#readme", @@ -27373,13 +27382,13 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.draw%2Fmcp/versions/1.1.1", "description": "Create diagrams in chat, rendered as live interactive draw.io diagrams. 10,000+ searchable shapes.", "version": "1.1.1", - "updatedAt": "2026-10-13T18:33:15Z", + "updatedAt": "2026-10-14T03:39:49Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/jgraph/drawio-mcp#readme", "repository": "https://github.com/jgraph/drawio-mcp", "repositorySource": "github", - "stargazerCount": 5631, + "stargazerCount": 5636, "websiteUrl": "https://www.drawio.com" } }, @@ -27402,7 +27411,7 @@ "ai-native" ], "version": "1.17.0", - "updatedAt": "2026-10-13T18:33:17Z", + "updatedAt": "2026-10-14T03:39:50Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Frihet-io/frihet-mcp#readme", @@ -27430,7 +27439,7 @@ "mcp" ], "version": "1.0.33", - "updatedAt": "2026-10-13T18:33:19Z", + "updatedAt": "2026-10-14T03:39:51Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/AKzar1el/god-prompt-mcp#readme", @@ -27459,7 +27468,7 @@ "geo" ], "version": "0.3.26", - "updatedAt": "2026-10-13T18:33:21Z", + "updatedAt": "2026-10-14T03:39:53Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/AKzar1el/mcp-geo#readme", @@ -27488,7 +27497,7 @@ "search-analytics" ], "version": "0.4.36-registry.1", - "updatedAt": "2026-10-13T18:33:23Z", + "updatedAt": "2026-10-14T03:39:55Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/AKzar1el/mcp-gsc#readme", @@ -27517,7 +27526,7 @@ "keyword-research" ], "version": "0.2.37", - "updatedAt": "2026-10-13T18:33:26Z", + "updatedAt": "2026-10-14T03:39:57Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/AKzar1el/mcp-trendpulse#readme", @@ -27545,7 +27554,7 @@ "w3c-validator" ], "version": "1.3.42", - "updatedAt": "2026-10-13T18:33:30Z", + "updatedAt": "2026-10-14T03:39:59Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/AKzar1el/mcp-web-validator#readme", @@ -27574,7 +27583,7 @@ "model-context-protocol" ], "version": "1.11.0", - "updatedAt": "2026-10-13T18:33:32Z", + "updatedAt": "2026-10-14T03:40:00Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/AlvisoOculus/optionsahoy-mcp#readme", @@ -27591,7 +27600,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.AnimaApp%2Fanima/versions/1.0.0", "description": "Connect AI coding agents to Anima Playground, Figma, and your design system.", "version": "1.0.0", - "updatedAt": "2026-10-13T18:33:33Z", + "updatedAt": "2026-10-14T03:40:02Z", "metadata": { "primaryLanguage": "Shell", "readmeUrl": "https://github.com/AnimaApp/mcp-server-guide#readme", @@ -27612,7 +27621,7 @@ "model-context-protocol" ], "version": "0.1.19", - "updatedAt": "2026-10-13T18:33:35Z", + "updatedAt": "2026-10-14T03:40:03Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/Banjo-Ventures/lodestar-stamp-mcp#readme", @@ -27640,7 +27649,7 @@ "uta-v3" ], "version": "3.0.2", - "updatedAt": "2026-10-13T18:33:37Z", + "updatedAt": "2026-10-14T03:40:05Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Bitget-AI/agent-mcp#readme", @@ -27668,7 +27677,7 @@ "hackernews" ], "version": "1.2.0", - "updatedAt": "2026-10-13T18:33:39Z", + "updatedAt": "2026-10-14T03:40:07Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/BuyWhere/buywhere-mcp#readme", @@ -27685,7 +27694,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.CAST-Extend%2Fimaging-mcp-server/versions/3.0.4", "description": "MCP server exposing CAST Imaging software architecture insights to AI agents", "version": "3.0.4", - "updatedAt": "2026-10-13T18:33:40Z", + "updatedAt": "2026-10-14T03:40:08Z", "metadata": { "readmeUrl": "https://github.com/CAST-Extend/CAST-Imaging-Mcp#readme", "repository": "https://github.com/CAST-Extend/CAST-Imaging-Mcp", @@ -27700,7 +27709,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.ChanghuLiu%2Fengland-works-watch/versions/0.1.2", "description": "RegEvidenceHub Sponsor: UK Skilled Worker sponsor-change preflight with GOV.UK evidence.", "version": "0.1.2", - "updatedAt": "2026-10-13T18:33:42Z", + "updatedAt": "2026-10-14T03:40:17Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/ChanghuLiu/england-works-watch#readme", @@ -27726,13 +27735,13 @@ "mcp" ], "version": "1.10.1", - "updatedAt": "2026-10-13T18:33:44Z", + "updatedAt": "2026-10-14T03:40:18Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/ChromeDevTools/chrome-devtools-mcp#readme", "repository": "https://github.com/ChromeDevTools/chrome-devtools-mcp", "repositorySource": "github", - "stargazerCount": 53455 + "stargazerCount": 53483 } }, { @@ -27742,13 +27751,13 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.ClickHouse%2Fmcp-clickhouse/versions/0.7.0", "description": "Official ClickHouse MCP server for querying and exploring ClickHouse clusters and chDB.", "version": "0.7.0", - "updatedAt": "2026-10-13T18:33:49Z", + "updatedAt": "2026-10-14T03:40:23Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/ClickHouse/mcp-clickhouse#readme", "repository": "https://github.com/ClickHouse/mcp-clickhouse", "repositorySource": "github", - "stargazerCount": 886, + "stargazerCount": 887, "websiteUrl": "https://clickhouse.com" } }, @@ -27759,7 +27768,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.ComposioHQ%2Fcomposio/versions/1.0.5", "description": "Connect AI agents to 1000+ apps with managed authentication and tool-calling.", "version": "1.0.5", - "updatedAt": "2026-10-13T18:33:51Z", + "updatedAt": "2026-10-14T03:40:24Z", "metadata": { "readmeUrl": "https://github.com/ComposioHQ/GHMCP#readme", "repository": "https://github.com/ComposioHQ/GHMCP", @@ -27782,7 +27791,7 @@ "mcp-server" ], "version": "0.19.0", - "updatedAt": "2026-10-13T18:33:52Z", + "updatedAt": "2026-10-14T03:40:28Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/CrowdStrike/falcon-mcp#readme", @@ -27806,7 +27815,7 @@ "model-context-protocol" ], "version": "5.0.1", - "updatedAt": "2026-10-13T18:33:54Z", + "updatedAt": "2026-10-14T03:40:29Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/Dayananda-D/DevCDP#readme", @@ -27835,7 +27844,7 @@ "smithery" ], "version": "1.3.1", - "updatedAt": "2026-10-13T18:33:57Z", + "updatedAt": "2026-10-14T03:40:31Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Decodo/mcp-server#readme", @@ -27861,7 +27870,7 @@ "observability" ], "version": "7.0.0", - "updatedAt": "2026-10-13T18:34:02Z", + "updatedAt": "2026-10-14T03:40:33Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/Dynatrace/dynatrace-for-ai#readme", @@ -27882,7 +27891,7 @@ "sql" ], "version": "1.0", - "updatedAt": "2026-10-13T18:34:06Z", + "updatedAt": "2026-10-14T03:40:34Z", "metadata": { "primaryLanguage": "C#", "readmeUrl": "https://github.com/ErikEJ/SqlServer.Rules#readme", @@ -27907,7 +27916,7 @@ "gemini-cli-extension" ], "version": "1.0.4", - "updatedAt": "2026-10-13T18:34:07Z", + "updatedAt": "2026-10-14T03:40:36Z", "metadata": { "primaryLanguage": "Ruby", "readmeUrl": "https://github.com/FullEnrich/fullenrich-skills#readme", @@ -27923,7 +27932,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.Graphify-Labs%2Fgraphify/versions/0.1.1", "description": "Search indexed code, trace dependencies, assess change impact, and recall repository memory.", "version": "0.1.1", - "updatedAt": "2026-10-13T18:34:16Z", + "updatedAt": "2026-10-14T03:40:43Z", "metadata": { "readmeUrl": "https://github.com/Graphify-Labs/graphify-mcp#readme", "repository": "https://github.com/Graphify-Labs/graphify-mcp", @@ -27950,7 +27959,7 @@ "openssf" ], "version": "1.2.3", - "updatedAt": "2026-10-13T18:34:21Z", + "updatedAt": "2026-10-14T03:40:45Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/Guruprasath-Annadurai/Whitepact#readme", @@ -27979,7 +27988,7 @@ "ga4" ], "version": "1.2.5", - "updatedAt": "2026-10-13T18:34:26Z", + "updatedAt": "2026-10-14T03:40:46Z", "metadata": { "readmeUrl": "https://github.com/HYPD-AI/ads-mcp-plugin#readme", "repository": "https://github.com/HYPD-AI/ads-mcp-plugin", @@ -27995,7 +28004,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.IgniteUI%2Figniteui-theming/versions/29.0.0", "description": "Generate Sass palettes, typography, elevations, and themes for Ignite UI components.", "version": "29.0.0", - "updatedAt": "2026-10-13T18:34:29Z", + "updatedAt": "2026-10-14T03:40:47Z", "metadata": { "primaryLanguage": "SCSS", "readmeUrl": "https://github.com/IgniteUI/igniteui-theming#readme", @@ -28022,7 +28031,7 @@ "scaffolding" ], "version": "15.8.2", - "updatedAt": "2026-10-13T18:34:36Z", + "updatedAt": "2026-10-14T03:40:48Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/IgniteUI/igniteui-cli#readme", @@ -28050,7 +28059,7 @@ "applescript" ], "version": "1.1.1", - "updatedAt": "2026-10-13T18:34:42Z", + "updatedAt": "2026-10-14T03:40:50Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/JonathanRReed/Apple-MCPs/tree/HEAD/Apple-Tools-MCP", @@ -28080,7 +28089,7 @@ "model-context-protocol" ], "version": "0.1.15", - "updatedAt": "2026-10-13T18:34:49Z", + "updatedAt": "2026-10-14T03:40:55Z", "metadata": { "primaryLanguage": "C#", "readmeUrl": "https://github.com/Karzone/TestAtlas#readme", @@ -28096,7 +28105,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.Krv-Labs%2Ftopos/versions/0.10.1", "description": "Structural code-quality tools for AI coding agents.", "version": "0.10.1", - "updatedAt": "2026-10-13T18:34:51Z", + "updatedAt": "2026-10-14T03:40:57Z", "metadata": { "primaryLanguage": "Rust", "readmeUrl": "https://github.com/Krv-Labs/topos#readme", @@ -28125,7 +28134,7 @@ "streamable-http" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:35:01Z", + "updatedAt": "2026-10-14T03:40:58Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/LLM-Pulse/llmpulse-mcp#readme", @@ -28144,7 +28153,7 @@ "gemini-cli-extension" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:35:10Z", + "updatedAt": "2026-10-14T03:40:59Z", "metadata": { "primaryLanguage": "PowerShell", "readmeUrl": "https://github.com/LambdaTest/mcp-server-guide#readme", @@ -28172,7 +28181,7 @@ "model-context-protocol" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:35:11Z", + "updatedAt": "2026-10-14T03:41:01Z", "metadata": { "primaryLanguage": "Go", "readmeUrl": "https://github.com/MachuraHarry/pipe#readme", @@ -28200,7 +28209,7 @@ "health-communication" ], "version": "1.1.0", - "updatedAt": "2026-10-13T18:35:13Z", + "updatedAt": "2026-10-14T03:41:02Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/MarshallBear1/juno-open-health-tools#readme", @@ -28227,7 +28236,7 @@ "accessibility-testing" ], "version": "1.2.9", - "updatedAt": "2026-10-13T18:35:14Z", + "updatedAt": "2026-10-14T03:41:03Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/MasterPlayspots/motionspec#readme", @@ -28243,7 +28252,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.Nikhilprasad-r%2Fredmine-mcp-connector/versions/1.0.1", "description": "stdio MCP server wrapping the Redmine REST API: issues, projects, users, time, wiki, versions.", "version": "1.0.1", - "updatedAt": "2026-10-13T18:35:24Z", + "updatedAt": "2026-10-14T03:41:04Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Nikhilprasad-r/redmine-mcp-server#readme", @@ -28271,7 +28280,7 @@ "open-source" ], "version": "0.1.0", - "updatedAt": "2026-10-13T18:35:34Z", + "updatedAt": "2026-10-14T03:41:08Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Noveum/orbit/tree/HEAD/packages/mcp-server", @@ -28292,7 +28301,7 @@ "gemini-cli-extension" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:35:44Z", + "updatedAt": "2026-10-14T03:41:16Z", "metadata": { "readmeUrl": "https://github.com/OctoPerf/octoperf-claude-plugins#readme", "repository": "https://github.com/OctoPerf/octoperf-claude-plugins", @@ -28311,7 +28320,7 @@ "voice-assistant" ], "version": "0.8.0", - "updatedAt": "2026-10-13T18:35:54Z", + "updatedAt": "2026-10-14T03:41:20Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Omnidim/omnidim-mcp-server#readme", @@ -28328,7 +28337,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.Openly-Useful%2Fcitewire/versions/0.2.0", "description": "Attribution-first MCP server for free news sources and free article APIs.", "version": "0.2.0", - "updatedAt": "2026-10-13T18:36:15Z", + "updatedAt": "2026-10-14T03:41:22Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/Openly-Useful/citewire#readme", @@ -28345,7 +28354,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.PagerDuty%2Fpagerduty-mcp/versions/0.2.1", "description": "PagerDuty's official MCP server which provides tools to interact with your PagerDuty account.", "version": "0.2.1", - "updatedAt": "2026-10-13T18:36:31Z", + "updatedAt": "2026-10-14T03:41:27Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/PagerDuty/pagerduty-mcp-server#readme", @@ -28373,7 +28382,7 @@ "bing-ads" ], "version": "2.3.1", - "updatedAt": "2026-10-13T18:36:32Z", + "updatedAt": "2026-10-14T03:41:28Z", "metadata": { "readmeUrl": "https://github.com/PaidSync/paidsync-mcp#readme", "repository": "https://github.com/PaidSync/paidsync-mcp", @@ -28401,13 +28410,13 @@ "google-analytics-alternative" ], "version": "2.14.1", - "updatedAt": "2026-10-13T18:36:34Z", + "updatedAt": "2026-10-14T03:41:29Z", "metadata": { "primaryLanguage": "Go", "readmeUrl": "https://github.com/pascalebeier/hitkeep#readme", "repository": "https://github.com/pascalebeier/hitkeep", "repositorySource": "github", - "stargazerCount": 94, + "stargazerCount": 95, "websiteUrl": "https://hitkeep.com/use-cases/read-only-mcp-server-web-analytics/" } }, @@ -28418,7 +28427,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.QWarranto%2Fleafengines/versions/2.0.8", "description": "🌱 Agricultural AI: Soil analysis, crop recommendations, weather forecasts. FREE TurboQuant.", "version": "2.0.8", - "updatedAt": "2026-10-13T18:36:36Z", + "updatedAt": "2026-10-14T03:41:31Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/QWarranto/leafengines-claude-mcp#readme", @@ -28440,7 +28449,7 @@ "ui5" ], "version": "1.15.8", - "updatedAt": "2026-10-13T18:36:45Z", + "updatedAt": "2026-10-14T03:41:32Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/SAP/open-ux-tools/tree/HEAD/packages/fiori-mcp-server", @@ -28465,7 +28474,7 @@ "gemini-cli-extension" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:36:54Z", + "updatedAt": "2026-10-14T03:41:34Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/SanctionsKit/sanctions-kit-mcp-plugin#readme", @@ -28487,7 +28496,7 @@ "webcrawler" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:36:55Z", + "updatedAt": "2026-10-14T03:41:35Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/ScrapeGraphAI/scrapegraph-mcp#readme", @@ -28515,7 +28524,7 @@ "mcp-tools" ], "version": "2.2.0", - "updatedAt": "2026-10-13T18:37:01Z", + "updatedAt": "2026-10-14T03:07:48Z", "metadata": { "primaryLanguage": "PHP", "readmeUrl": "https://github.com/Sendmux/sendmux-sdk/tree/HEAD/packages/python/mcp", @@ -28538,7 +28547,7 @@ "model-context-protocol" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:37:03Z", + "updatedAt": "2026-10-14T03:07:50Z", "metadata": { "readmeUrl": "https://github.com/since-dev/mcp#readme", "repository": "https://github.com/since-dev/mcp", @@ -28563,7 +28572,7 @@ "static-analysis" ], "version": "1.21.0", - "updatedAt": "2026-10-13T18:37:05Z", + "updatedAt": "2026-10-14T03:07:51Z", "metadata": { "primaryLanguage": "Java", "readmeUrl": "https://github.com/SonarSource/sonarqube-mcp-server#readme", @@ -28586,7 +28595,7 @@ "mcp-server" ], "version": "0.3.2", - "updatedAt": "2026-10-13T18:37:06Z", + "updatedAt": "2026-10-14T03:07:52Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/UI5/mcp-server#readme", @@ -28610,7 +28619,7 @@ "webcomponent" ], "version": "0.1.2", - "updatedAt": "2026-10-13T18:37:08Z", + "updatedAt": "2026-10-14T03:07:54Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/UI5/webcomponents-mcp-server#readme", @@ -28638,7 +28647,7 @@ "market-intelligence" ], "version": "3.0.2", - "updatedAt": "2026-10-13T18:37:10Z", + "updatedAt": "2026-10-14T03:07:55Z", "metadata": { "readmeUrl": "https://github.com/UltralayerHQ/ultralayer-plugin#readme", "repository": "https://github.com/UltralayerHQ/ultralayer-plugin", @@ -28664,7 +28673,7 @@ "valkyrai" ], "version": "0.3.3", - "updatedAt": "2026-10-13T18:37:11Z", + "updatedAt": "2026-10-14T03:07:56Z", "metadata": { "primaryLanguage": "Shell", "readmeUrl": "https://github.com/ValkyrLabs/GrayMatter#readme", @@ -28693,13 +28702,13 @@ "agent-collaboration" ], "version": "2.4.3", - "updatedAt": "2026-10-13T18:37:14Z", + "updatedAt": "2026-10-14T03:07:58Z", "metadata": { "primaryLanguage": "Rust", "readmeUrl": "https://github.com/Vortx-AI/emem#readme", "repository": "https://github.com/Vortx-AI/emem", "repositorySource": "github", - "stargazerCount": 68, + "stargazerCount": 69, "websiteUrl": "https://emem.dev" } }, @@ -28710,7 +28719,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.Wopee-io%2Fwopee-mcp/versions/1.30.2", "description": "AI testing agents for web apps — dispatch test runs, crawls, fetch artifacts and status.", "version": "1.30.2", - "updatedAt": "2026-10-13T18:37:15Z", + "updatedAt": "2026-10-14T03:07:59Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Wopee-io/wopee-mcp#readme", @@ -28733,7 +28742,7 @@ "trust" ], "version": "0.4.0", - "updatedAt": "2026-10-13T18:37:17Z", + "updatedAt": "2026-10-14T03:08:01Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/YugantM/hvtracker-mcp#readme", @@ -28761,12 +28770,12 @@ "chatgpt" ], "version": "1.0.6", - "updatedAt": "2026-10-13T18:37:19Z", + "updatedAt": "2026-10-14T03:08:02Z", "metadata": { "readmeUrl": "https://github.com/adkit/ads-mcp#readme", "repository": "https://github.com/adkit/ads-mcp", "repositorySource": "github", - "stargazerCount": 15, + "stargazerCount": 16, "websiteUrl": "https://adkit.so" } }, @@ -28789,7 +28798,7 @@ "ai-agents" ], "version": "0.24.0", - "updatedAt": "2026-10-13T18:37:21Z", + "updatedAt": "2026-10-14T03:08:03Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/agentic-hil/agentic-hil#readme", @@ -28818,7 +28827,7 @@ "cursor" ], "version": "1.5.1", - "updatedAt": "2026-10-13T18:37:24Z", + "updatedAt": "2026-10-14T03:08:05Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/alimbenhelal-pro/ALM-XPP-MCP#readme", @@ -28845,7 +28854,7 @@ "mcp-server" ], "version": "0.12.0", - "updatedAt": "2026-10-13T18:37:27Z", + "updatedAt": "2026-10-14T03:08:06Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/anilloutombam/mcp-failure-lab#readme", @@ -28869,7 +28878,7 @@ "yandex" ], "version": "1.8.0", - "updatedAt": "2026-10-13T18:37:28Z", + "updatedAt": "2026-10-14T03:08:07Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/antohins/seo-tools-mcp#readme", @@ -28894,7 +28903,7 @@ "yandex" ], "version": "1.8.0", - "updatedAt": "2026-10-13T18:37:30Z", + "updatedAt": "2026-10-14T03:08:08Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/antohins/seo-tools-mcp#readme", @@ -28919,7 +28928,7 @@ "yandex" ], "version": "1.8.0", - "updatedAt": "2026-10-13T18:37:31Z", + "updatedAt": "2026-10-14T03:08:09Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/antohins/seo-tools-mcp#readme", @@ -28944,7 +28953,7 @@ "yandex" ], "version": "1.8.0", - "updatedAt": "2026-10-13T18:37:33Z", + "updatedAt": "2026-10-14T03:08:11Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/antohins/seo-tools-mcp#readme", @@ -28969,7 +28978,7 @@ "yandex" ], "version": "1.8.0", - "updatedAt": "2026-10-13T18:37:34Z", + "updatedAt": "2026-10-14T03:08:12Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/antohins/seo-tools-mcp#readme", @@ -28994,7 +29003,7 @@ "yandex" ], "version": "1.8.0", - "updatedAt": "2026-10-13T18:37:36Z", + "updatedAt": "2026-10-14T03:08:13Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/antohins/seo-tools-mcp#readme", @@ -29019,7 +29028,7 @@ "yandex" ], "version": "1.8.0", - "updatedAt": "2026-10-13T18:37:38Z", + "updatedAt": "2026-10-14T03:08:15Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/antohins/seo-tools-mcp#readme", @@ -29044,7 +29053,7 @@ "yandex" ], "version": "1.8.0", - "updatedAt": "2026-10-13T18:37:39Z", + "updatedAt": "2026-10-14T03:08:16Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/antohins/seo-tools-mcp#readme", @@ -29073,7 +29082,7 @@ "ai-tools" ], "version": "0.7.0", - "updatedAt": "2026-10-13T18:37:41Z", + "updatedAt": "2026-10-14T03:08:17Z", "metadata": { "primaryLanguage": "Kotlin", "readmeUrl": "https://github.com/aoreshkov/kotlin-lib-mcp#readme", @@ -29090,7 +29099,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.apolloio%2Fapollo-mcp/versions/0.1.1", "description": "Prospect, enrich leads, and manage outreach sequences with Apollo.io.", "version": "0.1.1", - "updatedAt": "2026-10-13T18:37:42Z", + "updatedAt": "2026-10-14T03:08:18Z", "metadata": { "readmeUrl": "https://github.com/apolloio/apollo-mcp-plugin.git#readme", "repository": "https://github.com/apolloio/apollo-mcp-plugin.git", @@ -29118,12 +29127,13 @@ "mcp-server" ], "version": "0.10.7", - "updatedAt": "2026-10-13T18:37:44Z", + "updatedAt": "2026-10-14T03:08:19Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/arcmira/mcp#readme", "repository": "https://github.com/arcmira/mcp", "repositorySource": "github", + "stargazerCount": 3, "websiteUrl": "https://arcmira.com" } }, @@ -29134,13 +29144,13 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.arm%2Farm-mcp/versions/2.4.0", "description": "Official Arm MCP server for code migration, optimization, and Arm architecture guidance", "version": "2.4.0", - "updatedAt": "2026-10-13T18:37:46Z", + "updatedAt": "2026-10-14T03:08:21Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/arm/mcp#readme", "repository": "https://github.com/arm/mcp", "repositorySource": "github", - "stargazerCount": 91, + "stargazerCount": 92, "websiteUrl": "https://github.com/arm/mcp" } }, @@ -29163,7 +29173,7 @@ "scheduler" ], "version": "1.42.0", - "updatedAt": "2026-10-13T18:37:48Z", + "updatedAt": "2026-10-14T03:08:22Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/azeemkafridi/bulkpublish-api/tree/HEAD/mcp-server", @@ -29193,13 +29203,13 @@ "knowlege-graph" ], "version": "0.23.2", - "updatedAt": "2026-10-13T18:37:49Z", + "updatedAt": "2026-10-14T03:08:24Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/basicmachines-co/basic-memory.git#readme", "repository": "https://github.com/basicmachines-co/basic-memory.git", "repositorySource": "github", - "stargazerCount": 4163 + "stargazerCount": 4165 } }, { @@ -29221,7 +29231,7 @@ "fdc3" ], "version": "0.1.8", - "updatedAt": "2026-10-13T18:37:51Z", + "updatedAt": "2026-10-14T03:08:25Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/beepboop2025/financial-evidence-skills#readme", @@ -29248,13 +29258,13 @@ "data-extraction" ], "version": "3.0.0", - "updatedAt": "2026-10-13T18:37:53Z", + "updatedAt": "2026-10-14T03:08:26Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/brightdata/brightdata-mcp#readme", "repository": "https://github.com/brightdata/brightdata-mcp", "repositorySource": "github", - "stargazerCount": 2673 + "stargazerCount": 2674 } }, { @@ -29272,13 +29282,13 @@ "quality-assurance" ], "version": "2.1.1", - "updatedAt": "2026-10-13T18:37:54Z", + "updatedAt": "2026-10-14T03:08:28Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/browserstack/mcp-server#readme", "repository": "https://github.com/browserstack/mcp-server", "repositorySource": "github", - "stargazerCount": 154 + "stargazerCount": 155 } }, { @@ -29300,7 +29310,7 @@ "template" ], "version": "0.7.0", - "updatedAt": "2026-10-13T18:37:56Z", + "updatedAt": "2026-10-14T03:08:30Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/brunovicco/mcp-server-auth-template#readme", @@ -29328,13 +29338,13 @@ "sqlserver" ], "version": "1.5.0", - "updatedAt": "2026-10-13T18:37:57Z", + "updatedAt": "2026-10-14T03:08:31Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/bytebase/dbhub#readme", "repository": "https://github.com/bytebase/dbhub", "repositorySource": "github", - "stargazerCount": 3639 + "stargazerCount": 3641 } }, { @@ -29356,7 +29366,7 @@ "agentic-coding" ], "version": "0.0.6", - "updatedAt": "2026-10-13T18:38:00Z", + "updatedAt": "2026-10-14T03:08:32Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/cap-js/mcp-server#readme", @@ -29384,7 +29394,7 @@ "static-analysis" ], "version": "0.4.0", - "updatedAt": "2026-10-13T18:38:01Z", + "updatedAt": "2026-10-14T03:08:33Z", "metadata": { "primaryLanguage": "Rust", "readmeUrl": "https://github.com/carrick-tools/carrick#readme", @@ -29401,7 +29411,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.carterchencc%2Fnomas/versions/1.3.2", "description": "Parsed SEC events by CIK/CUSIP: 8-K items, Form 144, Form D, FTD. Not EDGAR HTML.", "version": "1.3.2", - "updatedAt": "2026-10-13T18:38:03Z", + "updatedAt": "2026-10-14T03:08:34Z", "metadata": { "readmeUrl": "https://github.com/carterchencc/nomas_mcp#readme", "repository": "https://github.com/carterchencc/nomas_mcp", @@ -29416,7 +29426,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.checkout%2Fmcp/versions/1.0.0", "description": "Search Checkout.com docs and API reference, plus manage payments, refunds, and payment links.", "version": "1.0.0", - "updatedAt": "2026-10-13T18:38:04Z", + "updatedAt": "2026-10-14T03:08:36Z", "metadata": { "readmeUrl": "https://github.com/checkout/checkout-mcp#readme", "repository": "https://github.com/checkout/checkout-mcp", @@ -29443,7 +29453,7 @@ "bug-detection" ], "version": "0.6.0", - "updatedAt": "2026-10-13T18:38:06Z", + "updatedAt": "2026-10-14T03:08:37Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/chriswu727/argus#readme", @@ -29472,7 +29482,7 @@ "mcp" ], "version": "1.17.0", - "updatedAt": "2026-10-13T18:38:07Z", + "updatedAt": "2026-10-14T03:08:38Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/cliwant/mcp-sam-gov#readme", @@ -29500,13 +29510,13 @@ "documentation" ], "version": "0.1.6", - "updatedAt": "2026-10-13T18:38:09Z", + "updatedAt": "2026-10-14T03:08:39Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/cometchat/docs-mcp#readme", "repository": "https://github.com/cometchat/docs-mcp", "repositorySource": "github", - "stargazerCount": 116, + "stargazerCount": 117, "websiteUrl": "https://www.cometchat.com/docs/mcp-server" } }, @@ -29526,7 +29536,7 @@ "model-context-protocol" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:38:11Z", + "updatedAt": "2026-10-14T03:08:41Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/conduktor/kafka-mcp#readme", @@ -29555,7 +29565,7 @@ "context" ], "version": "0.4.81", - "updatedAt": "2026-10-13T18:38:12Z", + "updatedAt": "2026-10-14T03:08:42Z", "metadata": { "primaryLanguage": "Rust", "readmeUrl": "https://github.com/contextstream/mcp-server#readme", @@ -29572,7 +29582,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.devchad-cmd%2Fskilldb/versions/0.8.4-registry.1", "description": "Search and load AI agent skills. Free metadata; full content requires a Pro or Studio account.", "version": "0.8.4-registry.1", - "updatedAt": "2026-10-13T18:38:13Z", + "updatedAt": "2026-10-14T03:08:43Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/devchad-cmd/skilldb-sdk#readme", @@ -29596,7 +29606,7 @@ "typescript" ], "version": "1.5.2", - "updatedAt": "2026-10-13T18:38:15Z", + "updatedAt": "2026-10-14T03:08:44Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/dreamworkhq/mcp/tree/HEAD/apps/mcp", @@ -29625,7 +29635,7 @@ "model-context-protocol" ], "version": "1.8.4", - "updatedAt": "2026-10-13T18:38:16Z", + "updatedAt": "2026-10-14T03:08:46Z", "metadata": { "readmeUrl": "https://github.com/dsers/dsers-mcp-server#readme", "repository": "https://github.com/dsers/dsers-mcp-server", @@ -29649,7 +29659,7 @@ "observability" ], "version": "1.1.1", - "updatedAt": "2026-10-13T18:38:17Z", + "updatedAt": "2026-10-14T03:08:47Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/dynatrace-oss/dynatrace-managed-mcp#readme", @@ -29672,13 +29682,13 @@ "vibe-prospecting" ], "version": "2.0.0", - "updatedAt": "2026-10-13T18:38:19Z", + "updatedAt": "2026-10-14T03:08:48Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/explorium-ai/vibeprospecting-mcp#readme", "repository": "https://github.com/explorium-ai/vibeprospecting-mcp", "repositorySource": "github", - "stargazerCount": 162, + "stargazerCount": 163, "websiteUrl": "https://www.vibeprospecting.ai" } }, @@ -29689,7 +29699,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.f%2Fprompts.chat-mcp/versions/1.0.9", "description": "Search and retrieve AI prompts from prompts.chat, the social platform for AI prompts.", "version": "1.0.9", - "updatedAt": "2026-10-13T18:38:21Z", + "updatedAt": "2026-10-14T03:08:50Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/f/prompts.chat-mcp#readme", @@ -29705,7 +29715,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.flinker-app%2Fifc-mcp/versions/0.2.0", "description": "Local IFC/BIM MCP server with IfcOpenShell Python in Pyodide and an IFC viewer.", "version": "0.2.0", - "updatedAt": "2026-10-13T18:38:23Z", + "updatedAt": "2026-10-14T03:08:51Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/flinker-app/ifc-mcp#readme", @@ -29727,7 +29737,7 @@ "cli" ], "version": "0.42.0", - "updatedAt": "2026-10-13T18:38:26Z", + "updatedAt": "2026-10-14T03:08:52Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/getsentry/sentry-mcp/tree/HEAD/packages/mcp-server", @@ -29749,13 +29759,13 @@ "mcp-server" ], "version": "2.0.2", - "updatedAt": "2026-10-13T18:38:28Z", + "updatedAt": "2026-10-14T03:08:54Z", "metadata": { "primaryLanguage": "Go", "readmeUrl": "https://github.com/github/github-mcp-server#readme", "repository": "https://github.com/github/github-mcp-server", "repositorySource": "github", - "stargazerCount": 33584 + "stargazerCount": 33594 } }, { @@ -29770,7 +29780,7 @@ "mcp-server" ], "version": "0.6.0", - "updatedAt": "2026-10-13T18:38:31Z", + "updatedAt": "2026-10-14T03:08:56Z", "metadata": { "primaryLanguage": "Go", "readmeUrl": "https://github.com/goreleaser/mcp#readme", @@ -29793,7 +29803,7 @@ "rankability" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:38:32Z", + "updatedAt": "2026-10-14T03:08:57Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/gotchseo/rankability-integrations#readme", @@ -29809,7 +29819,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.grtwo-jcansler%2Fgryz/versions/1.13.0", "description": "Shared memory and workspace for your AI agent team, plus doc publishing. Free with a Gryz account.", "version": "1.13.0", - "updatedAt": "2026-10-13T18:38:34Z", + "updatedAt": "2026-10-14T03:08:58Z", "metadata": { "primaryLanguage": "Shell", "readmeUrl": "https://github.com/grtwo-jcansler/gryz-cursor-plugin#readme", @@ -29825,7 +29835,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.hashicorp%2Fterraform-mcp-server/versions/1.0.0", "description": "Generate more accurate Terraform and automate workflows for HCP Terraform and Terraform Enterprise", "version": "1.0.0", - "updatedAt": "2026-10-13T18:38:35Z", + "updatedAt": "2026-10-14T03:08:59Z", "metadata": { "primaryLanguage": "Go", "readmeUrl": "https://github.com/hashicorp/terraform-mcp-server#readme", @@ -29841,7 +29851,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.helena-bioinformatics%2Ffolklore/versions/1.5.0", "description": "Bioinformatics MCP for genomic variant interpretation, gene-disease evidence and literature.", "version": "1.5.0", - "updatedAt": "2026-10-13T18:38:36Z", + "updatedAt": "2026-10-14T03:09:00Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/helena-bioinformatics/folklore-mcp#readme", @@ -29868,7 +29878,7 @@ "semantic-search" ], "version": "0.2.1", - "updatedAt": "2026-10-13T18:38:38Z", + "updatedAt": "2026-10-14T03:09:02Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/helena-bioinformatics/noodle-mcp#readme", @@ -29896,7 +29906,7 @@ "ai-marketing-agent" ], "version": "0.1.407", - "updatedAt": "2026-10-13T18:38:40Z", + "updatedAt": "2026-10-14T03:09:03Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/hermoso-ai/hermoso#readme", @@ -29925,7 +29935,7 @@ "services" ], "version": "0.1.0", - "updatedAt": "2026-10-13T18:38:45Z", + "updatedAt": "2026-10-14T03:09:06Z", "metadata": { "primaryLanguage": "C#", "readmeUrl": "https://github.com/holomodular/ServiceBricks#readme", @@ -29950,13 +29960,13 @@ "gemini-cli-extension" ], "version": "2.13.0", - "updatedAt": "2026-10-13T18:38:46Z", + "updatedAt": "2026-10-14T03:09:07Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/hostinger/api-mcp-server#readme", "repository": "https://github.com/hostinger/api-mcp-server", "repositorySource": "github", - "stargazerCount": 160 + "stargazerCount": 161 } }, { @@ -29969,7 +29979,7 @@ "gemini-cli-extension" ], "version": "1.1.0", - "updatedAt": "2026-10-13T18:38:50Z", + "updatedAt": "2026-10-14T03:09:10Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/htmlcsstoimage/agent-plugins#readme", @@ -29998,13 +30008,13 @@ "privacy" ], "version": "2.6.0", - "updatedAt": "2026-10-13T18:38:52Z", + "updatedAt": "2026-10-14T03:09:11Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/ihor-sokoliuk/mcp-searxng#readme", "repository": "https://github.com/ihor-sokoliuk/mcp-searxng", "repositorySource": "github", - "stargazerCount": 1298 + "stargazerCount": 1302 } }, { @@ -30026,7 +30036,7 @@ "rag" ], "version": "4.16.0", - "updatedAt": "2026-10-13T18:38:54Z", + "updatedAt": "2026-10-14T03:09:13Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/jagoff/memo#readme", @@ -30053,7 +30063,7 @@ "jfrog-mcp" ], "version": "0.1.1", - "updatedAt": "2026-10-13T18:38:57Z", + "updatedAt": "2026-10-14T03:09:15Z", "metadata": { "readmeUrl": "https://github.com/jfrog/jfrog-mcp-server#readme", "repository": "https://github.com/jfrog/jfrog-mcp-server", @@ -30068,7 +30078,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.jjohnsen%2Fjaj-dataverse-dev-mcp/versions/0.1.4", "description": "Xrm/Power Platform/Dataverse MCP for devs, Azure CLI auth, Web API and multi-environment support", "version": "0.1.4", - "updatedAt": "2026-10-13T18:38:59Z", + "updatedAt": "2026-10-14T03:09:16Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/jjohnsen/jaj-dataverse-dev-mcp#readme", @@ -30093,7 +30103,7 @@ "gemini-cli-extension" ], "version": "0.2.2", - "updatedAt": "2026-10-13T18:39:00Z", + "updatedAt": "2026-10-14T03:09:18Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/layergen/eodly-mcp#readme", @@ -30108,7 +30118,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.likhithreddy%2Ffittok/versions/0.11.1", "description": "Retrieve only the relevant code for a codebase question, within a token budget.", "version": "0.11.1", - "updatedAt": "2026-10-13T18:39:02Z", + "updatedAt": "2026-10-14T03:09:19Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/likhithreddy/fittok#readme", @@ -30124,7 +30134,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.mapbox%2Fmcp-devkit-server/versions/0.8.2", "description": "Provides AI assistants with direct access to Mapbox developer APIs and documentation.", "version": "0.8.2", - "updatedAt": "2026-10-13T18:39:04Z", + "updatedAt": "2026-10-14T03:09:20Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/mapbox/mcp-devkit-server#readme", @@ -30140,7 +30150,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.mapbox%2Fmcp-server/versions/99.0.0-dev", "description": "Geospatial intelligence with Mapbox APIs like geocoding, POI search, directions, isochrones, etc.", "version": "99.0.0-dev", - "updatedAt": "2026-10-13T18:39:06Z", + "updatedAt": "2026-10-14T03:09:22Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/mapbox/mcp-server#readme", @@ -30167,7 +30177,7 @@ "gemini-cli-extension" ], "version": "1.4.0", - "updatedAt": "2026-10-13T18:39:07Z", + "updatedAt": "2026-10-14T03:09:23Z", "metadata": { "readmeUrl": "https://github.com/marketeyeslive/market-eyes-live-mcp#readme", "repository": "https://github.com/marketeyeslive/market-eyes-live-mcp", @@ -30195,7 +30205,7 @@ "developer-tools" ], "version": "0.3.16", - "updatedAt": "2026-10-13T18:39:09Z", + "updatedAt": "2026-10-14T03:09:24Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/masondelan/selvedge#readme", @@ -30224,7 +30234,7 @@ "userbot" ], "version": "1.43.6", - "updatedAt": "2026-10-13T18:39:10Z", + "updatedAt": "2026-10-14T03:09:26Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/mcp-telegram/mcp-telegram#readme", @@ -30241,7 +30251,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.microsoft%2FEnterpriseMCP/versions/1.0.0", "description": "Official Microsoft MCP Server to query Microsoft Entra data using natural language", "version": "1.0.0", - "updatedAt": "2026-10-13T18:39:12Z", + "updatedAt": "2026-10-14T03:09:27Z", "metadata": { "readmeUrl": "https://github.com/microsoft/EnterpriseMCP#readme", "repository": "https://github.com/microsoft/EnterpriseMCP", @@ -30253,7 +30263,7 @@ "identifier": "urn:air:registry.modelcontextprotocol.io:io.github.microsoft:awesome-copilot", "displayName": "Awesome Copilot MCP Server", "type": "application/mcp-server+json", - "url": "https://api.mcp.github.com/v0.1/servers/io.github.microsoft%2Fawesome-copilot/versions/1.0.2026101305", + "url": "https://api.mcp.github.com/v0.1/servers/io.github.microsoft%2Fawesome-copilot/versions/1.0.2026101323", "description": "An MCP server that stores Copilot customizations from the Awesome Copilot repository", "tags": [ "dotnet", @@ -30261,8 +30271,8 @@ "mcp-client", "mcp-server" ], - "version": "1.0.2026101305", - "updatedAt": "2026-10-13T18:39:14Z", + "version": "1.0.2026101323", + "updatedAt": "2026-10-14T03:09:28Z", "metadata": { "primaryLanguage": "C#", "readmeUrl": "https://github.com/microsoft/mcp-dotnet-samples#readme", @@ -30279,7 +30289,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.miroapp%2Fmcp-server/versions/1.0.2", "description": "Official Miro MCP server - Supports context to code and creating diagrams, docs, and data tables.", "version": "1.0.2", - "updatedAt": "2026-10-13T18:39:18Z", + "updatedAt": "2026-10-14T03:09:32Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/miroapp/miro-ai#readme", @@ -30307,7 +30317,7 @@ "mcp-server-card" ], "version": "0.7.7", - "updatedAt": "2026-10-13T18:39:20Z", + "updatedAt": "2026-10-14T03:09:33Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/mlava/agent-ready-mcp#readme", @@ -30336,7 +30346,7 @@ "mcp" ], "version": "0.8.12", - "updatedAt": "2026-10-13T18:39:22Z", + "updatedAt": "2026-10-14T03:09:34Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/mlava/scholar-sidekick-mcp#readme", @@ -30365,7 +30375,7 @@ "persistent-memory" ], "version": "0.15.1", - "updatedAt": "2026-10-13T18:39:24Z", + "updatedAt": "2026-10-14T03:09:36Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/mnemoverse/mcp-memory-server#readme", @@ -30389,7 +30399,7 @@ "mongodb-database" ], "version": "2.1.0", - "updatedAt": "2026-10-13T18:39:26Z", + "updatedAt": "2026-10-14T03:09:37Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/mongodb-js/mongodb-mcp-server#readme", @@ -30417,7 +30427,7 @@ "ai-memory-system" ], "version": "0.1.3", - "updatedAt": "2026-10-13T18:39:27Z", + "updatedAt": "2026-10-14T03:09:39Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/moorcheh-ai/memanto/tree/HEAD/integrations/mcp", @@ -30446,7 +30456,7 @@ "cursor" ], "version": "1.0.9", - "updatedAt": "2026-10-13T18:39:29Z", + "updatedAt": "2026-10-14T03:09:40Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/negm17111995/mcp-server#readme", @@ -30475,14 +30485,14 @@ "influxdb" ], "version": "2.12.1", - "updatedAt": "2026-10-13T18:39:31Z", + "updatedAt": "2026-10-14T03:09:41Z", "metadata": { "primaryLanguage": "Go", "readmeUrl": "https://github.com/netdata/netdata/tree/HEAD/docs/netdata-ai/mcp", "repository": "https://github.com/netdata/netdata", "repositorySource": "github", "repositorySubfolder": "docs/netdata-ai/mcp", - "stargazerCount": 80924, + "stargazerCount": 80925, "websiteUrl": "https://www.netdata.cloud" } }, @@ -30493,7 +30503,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.oakallow%2Foakallow/versions/1.0.0", "description": "Runtime permission, approval, and audit layer for AI agent tool execution.", "version": "1.0.0", - "updatedAt": "2026-10-13T18:39:32Z", + "updatedAt": "2026-10-14T03:09:47Z", "metadata": { "readmeUrl": "https://github.com/oakallow/oakallow-mcp#readme", "repository": "https://github.com/oakallow/oakallow-mcp", @@ -30521,7 +30531,7 @@ "local-first" ], "version": "1.1.0", - "updatedAt": "2026-10-13T18:39:34Z", + "updatedAt": "2026-10-14T03:09:53Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/oleksiijko/pmb#readme", @@ -30537,7 +30547,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.oliverhruby%2Fedupage-mcp/versions/0.7.0", "description": "EduPage MCP: timetables, grades, homework, meals, messages, 2FA, multi-school, role-aware.", "version": "0.7.0", - "updatedAt": "2026-10-13T18:39:35Z", + "updatedAt": "2026-10-14T03:09:58Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/oliverhruby/edupage-mcp#readme", @@ -30554,7 +30564,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.oliverhruby%2Fgramps-mcp/versions/0.2.0", "description": "MCP server for Gramps genealogy via the Gramps Web API: CRUD, search, merge, timelines, DNA.", "version": "0.2.0", - "updatedAt": "2026-10-13T18:39:36Z", + "updatedAt": "2026-10-14T03:10:04Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/oliverhruby/gramps-mcp#readme", @@ -30583,7 +30593,7 @@ "mcp" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:39:38Z", + "updatedAt": "2026-10-14T03:10:10Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/openaccountants/openaccountants#readme", @@ -30611,7 +30621,7 @@ "section-301" ], "version": "1.1.0", - "updatedAt": "2026-10-13T18:39:39Z", + "updatedAt": "2026-10-14T03:10:16Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/opsloft/tariff-resolver#readme", @@ -30640,7 +30650,7 @@ "video-editing" ], "version": "0.3.0", - "updatedAt": "2026-10-13T18:39:41Z", + "updatedAt": "2026-10-14T03:10:22Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/opus-pro/opusclip-mcp#readme", @@ -30657,7 +30667,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.parseablehq%2Fparseable-mcp-server/versions/0.2.16", "description": "Model Context Protocol server for Parseable. Lets LLMs discover and query Parseable.", "version": "0.2.16", - "updatedAt": "2026-10-13T18:39:42Z", + "updatedAt": "2026-10-14T03:10:27Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/parseablehq/parseable-mcp-server#readme", @@ -30685,7 +30695,7 @@ "azure" ], "version": "0.53.0", - "updatedAt": "2026-10-13T18:39:44Z", + "updatedAt": "2026-10-14T03:10:33Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/patrickchugh/terravision#readme", @@ -30714,7 +30724,7 @@ "ucg-fiber" ], "version": "0.25.0", - "updatedAt": "2026-10-13T18:39:45Z", + "updatedAt": "2026-10-14T03:10:39Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/pete-builds/mcp-unifi#readme", @@ -30739,7 +30749,7 @@ "server" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:39:47Z", + "updatedAt": "2026-10-14T03:10:45Z", "metadata": { "primaryLanguage": "Go", "readmeUrl": "https://github.com/pgEdge/pgedge-postgres-mcp#readme", @@ -30755,7 +30765,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.pranlabs%2Fvalca/versions/0.6.1", "description": "Scans code, IaC and AI-agent config for security problems. Read-only — nothing can be edited.", "version": "0.6.1", - "updatedAt": "2026-10-13T18:39:49Z", + "updatedAt": "2026-10-14T03:10:51Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/PranLabs/valca#readme", @@ -30784,7 +30794,7 @@ "model-context-protocol" ], "version": "0.1.3", - "updatedAt": "2026-10-13T18:39:50Z", + "updatedAt": "2026-10-14T03:10:57Z", "metadata": { "primaryLanguage": "Go", "readmeUrl": "https://github.com/prest/prest-mcp-adapter#readme", @@ -30802,7 +30812,7 @@ "gemini-cli-extension" ], "version": "2.0.3", - "updatedAt": "2026-10-13T18:39:52Z", + "updatedAt": "2026-10-14T03:11:02Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/prompeteer/prompeteer-mcp#readme", @@ -30828,7 +30838,7 @@ "windsurf" ], "version": "2.3.2", - "updatedAt": "2026-10-13T18:39:53Z", + "updatedAt": "2026-10-14T03:11:08Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/pubnub/pubnub-mcp-server#readme", @@ -30853,7 +30863,7 @@ "gemini-cli-extension" ], "version": "0.24.2", - "updatedAt": "2026-10-13T18:39:55Z", + "updatedAt": "2026-10-14T03:11:14Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/pubship/pubship#readme", @@ -30869,7 +30879,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.quicknode%2Fmcp/versions/1.0.1", "description": "Manage your blockchain infrastructure across 80+ chains with your agents.", "version": "1.0.1", - "updatedAt": "2026-10-13T18:39:57Z", + "updatedAt": "2026-10-14T03:11:20Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/quicknode/agent-plugins#readme", @@ -30885,7 +30895,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.resuly%2Fdaleads-mcp/versions/0.2.0", "description": "Australian development application and property intelligence data for AI agents.", "version": "0.2.0", - "updatedAt": "2026-10-13T18:39:58Z", + "updatedAt": "2026-10-14T03:11:25Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/resuly/daleads-mcp#readme", @@ -30897,7 +30907,7 @@ "identifier": "urn:air:registry.modelcontextprotocol.io:io.github.rigour-labs:rigour", "displayName": "Rigour", "type": "application/mcp-server+json", - "url": "https://api.mcp.github.com/v0.1/servers/io.github.rigour-labs%2Frigour/versions/7.0.4", + "url": "https://api.mcp.github.com/v0.1/servers/io.github.rigour-labs%2Frigour/versions/7.0.5", "description": "Lets coding agents review their change, find an existing helper, and recall the team's lessons.", "tags": [ "agentic-workflow", @@ -30911,8 +30921,8 @@ "llm", "mcp" ], - "version": "7.0.4", - "updatedAt": "2026-10-13T18:40:00Z", + "version": "7.0.5", + "updatedAt": "2026-10-14T03:11:31Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/rigour-labs/rigour#readme", @@ -30940,7 +30950,7 @@ "notifications" ], "version": "0.4.0", - "updatedAt": "2026-10-13T18:40:04Z", + "updatedAt": "2026-10-14T03:11:38Z", "metadata": { "primaryLanguage": "Rust", "readmeUrl": "https://github.com/rmzlb/notifyd#readme", @@ -30957,7 +30967,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.rubrikinc%2Frubrik-mcp/versions/0.8.20260928", "description": "Connect AI assistants to the Rubrik Security Cloud GraphQL API to discover, query, and automate.", "version": "0.8.20260928", - "updatedAt": "2026-10-13T18:40:06Z", + "updatedAt": "2026-10-14T03:11:44Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/rubrikinc/rubrik-mcp#readme", @@ -30974,7 +30984,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.salahawad%2Foutlook-personal-mcp/versions/0.1.1", "description": "Full-control MCP server for a personal Outlook.com mailbox and calendar (Microsoft Graph).", "version": "0.1.1", - "updatedAt": "2026-10-13T18:40:07Z", + "updatedAt": "2026-10-14T03:11:50Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/salahawad/outlook-personal-mcp#readme", @@ -30994,7 +31004,7 @@ "sas-osp" ], "version": "1.18.0", - "updatedAt": "2026-10-13T18:40:09Z", + "updatedAt": "2026-10-14T03:11:56Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/sassoftware/sas-mcp-server#readme", @@ -31007,7 +31017,7 @@ "identifier": "urn:air:registry.modelcontextprotocol.io:io.github.scavio-ai:scavio-mcp", "displayName": "Scavio", "type": "application/mcp-server+json", - "url": "https://api.mcp.github.com/v0.1/servers/io.github.scavio-ai%2Fscavio-mcp/versions/0.22.1", + "url": "https://api.mcp.github.com/v0.1/servers/io.github.scavio-ai%2Fscavio-mcp/versions/0.23.0", "description": "Structured web data from 36 platforms: Google, YouTube, Amazon, Walmart, Reddit, TikTok, LinkedIn", "tags": [ "ai", @@ -31021,8 +31031,8 @@ "search-api", "tiktok" ], - "version": "0.22.1", - "updatedAt": "2026-10-13T18:40:10Z", + "version": "0.23.0", + "updatedAt": "2026-10-14T03:12:02Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/scavio-ai/scavio-mcp#readme", @@ -31043,7 +31053,7 @@ "mcp-servers" ], "version": "2.0.0", - "updatedAt": "2026-10-13T18:40:13Z", + "updatedAt": "2026-10-14T03:12:08Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/serpapi/serpapi-mcp#readme", @@ -31068,7 +31078,7 @@ "typescript" ], "version": "1.1.1", - "updatedAt": "2026-10-13T18:40:14Z", + "updatedAt": "2026-10-14T03:12:14Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/shariqriazz/google-ai-search-mcp#readme", @@ -31096,7 +31106,7 @@ "protein-structure" ], "version": "1.5.1", - "updatedAt": "2026-10-13T18:40:16Z", + "updatedAt": "2026-10-14T03:12:20Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/smaniches/alphafold-sovereign-mcp#readme", @@ -31124,7 +31134,7 @@ "semantic-scholar" ], "version": "1.7.7", - "updatedAt": "2026-10-13T18:40:18Z", + "updatedAt": "2026-10-14T03:12:21Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/smaniches/semantic-scholar-mcp#readme", @@ -31152,7 +31162,7 @@ "drug-repurposing" ], "version": "1.3.9", - "updatedAt": "2026-10-13T18:40:20Z", + "updatedAt": "2026-10-14T03:12:27Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/smaniches/uniprot-mcp#readme", @@ -31168,7 +31178,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.smythmyke%2Fgovtoolspro-mcp-server/versions/0.1.3", "description": "Workflow tools for federal contractors: go/no-go scoring, incumbent intel, recompete, NECO.", "version": "0.1.3", - "updatedAt": "2026-10-13T18:40:22Z", + "updatedAt": "2026-10-14T03:12:33Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/smythmyke/govtoolspro-mcp-server#readme", @@ -31185,7 +31195,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.snyk%2Fsaw-mcp/versions/1.1.2", "description": "MCP server for Snyk API & Web — DAST scanning, findings management, and vulnerability triage", "version": "1.1.2", - "updatedAt": "2026-10-13T18:40:23Z", + "updatedAt": "2026-10-14T03:12:39Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/snyk/saw-mcp#readme", @@ -31201,7 +31211,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.sourcegraph%2Fmcp/versions/0.1.0", "description": "Sourcegraph code search, semantic search, go-to-definition, find-references, and diff search.", "version": "0.1.0", - "updatedAt": "2026-10-13T18:40:24Z", + "updatedAt": "2026-10-14T03:12:44Z", "metadata": { "readmeUrl": "https://github.com/sourcegraph-community/mcpregistry#readme", "repository": "https://github.com/sourcegraph-community/mcpregistry", @@ -31216,7 +31226,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.spacefast%2Fmcp/versions/0.5.1", "description": "Build, publish, and manage websites, dashboards, reports, and web tools with Spacefast.", "version": "0.5.1", - "updatedAt": "2026-10-13T18:40:26Z", + "updatedAt": "2026-10-14T03:12:50Z", "metadata": { "readmeUrl": "https://github.com/spacefast/mcp#readme", "repository": "https://github.com/spacefast/mcp", @@ -31244,7 +31254,7 @@ "stackql" ], "version": "0.12.778", - "updatedAt": "2026-10-13T18:40:27Z", + "updatedAt": "2026-10-14T03:12:56Z", "metadata": { "primaryLanguage": "Go", "readmeUrl": "https://github.com/stackql/stackql#readme", @@ -31271,7 +31281,7 @@ "remote-mcp" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:40:29Z", + "updatedAt": "2026-10-14T03:13:02Z", "metadata": { "readmeUrl": "https://github.com/suvadadepolo-blip/codex-reset-mcp#readme", "repository": "https://github.com/suvadadepolo-blip/codex-reset-mcp", @@ -31294,7 +31304,7 @@ "skillsmp" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:40:31Z", + "updatedAt": "2026-10-14T03:13:07Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/tambo-labs/charming-mcp#readme", @@ -31311,7 +31321,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.tavily-ai%2Ftavily-mcp/versions/0.2.15", "description": "MCP server for advanced web search using Tavily", "version": "0.2.15", - "updatedAt": "2026-10-13T18:40:32Z", + "updatedAt": "2026-10-14T03:13:13Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/tavily-ai/tavily-mcp#readme", @@ -31332,7 +31342,7 @@ "model-context-protocol" ], "version": "1.8.0", - "updatedAt": "2026-10-13T18:40:33Z", + "updatedAt": "2026-10-14T03:13:19Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/tjcgraham-rgb/gaip-agents#readme", @@ -31360,7 +31370,7 @@ "ai-agents" ], "version": "3.0.2", - "updatedAt": "2026-10-13T18:40:35Z", + "updatedAt": "2026-10-14T03:13:25Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/uizze/uizze#readme", @@ -31383,13 +31393,13 @@ "vibe-coding" ], "version": "4.4.1", - "updatedAt": "2026-10-13T18:40:36Z", + "updatedAt": "2026-10-14T03:13:31Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/upstash/context7#readme", "repository": "https://github.com/upstash/context7", "repositorySource": "github", - "stargazerCount": 62984, + "stargazerCount": 62995, "websiteUrl": "https://context7.com" } }, @@ -31400,7 +31410,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.github.venomseven%2Fnslookup/versions/1.6.0", "description": "DNS lookups, health reports, SSL certs, security scans, GEO scoring, uptime checks", "version": "1.6.0", - "updatedAt": "2026-10-13T18:40:38Z", + "updatedAt": "2026-10-14T03:13:32Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/NsLookup-io/nslookup-mcp#readme", @@ -31423,7 +31433,7 @@ "mcp" ], "version": "0.3.6", - "updatedAt": "2026-10-13T18:40:39Z", + "updatedAt": "2026-10-14T03:13:38Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/vercel/next-devtools-mcp#readme", @@ -31451,12 +31461,12 @@ "spl-token" ], "version": "1.0.9", - "updatedAt": "2026-10-13T18:40:41Z", + "updatedAt": "2026-10-14T03:13:44Z", "metadata": { "readmeUrl": "https://github.com/vybenetwork/solana-mcp-vybe#readme", "repository": "https://github.com/vybenetwork/solana-mcp-vybe", "repositorySource": "github", - "stargazerCount": 1866, + "stargazerCount": 1868, "websiteUrl": "https://docs.vybenetwork.com/docs/mcp" } }, @@ -31478,13 +31488,13 @@ "gemini-cli-extension" ], "version": "0.3.0", - "updatedAt": "2026-10-13T18:40:42Z", + "updatedAt": "2026-10-14T03:13:50Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/wonderwhy-er/DesktopCommanderMCP#readme", "repository": "https://github.com/wonderwhy-er/DesktopCommanderMCP", "repositorySource": "github", - "stargazerCount": 10028 + "stargazerCount": 10038 } }, { @@ -31506,7 +31516,7 @@ "memory-os" ], "version": "0.4.346", - "updatedAt": "2026-10-13T18:40:45Z", + "updatedAt": "2026-10-14T03:13:56Z", "metadata": { "primaryLanguage": "JavaScript", "readmeUrl": "https://github.com/yonro/memory-os-cli#readme", @@ -31526,7 +31536,7 @@ "ai-agents" ], "version": "0.9.2", - "updatedAt": "2026-10-13T18:40:46Z", + "updatedAt": "2026-10-14T03:14:01Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/zation/agent-radar#readme", @@ -31539,16 +31549,16 @@ "identifier": "urn:air:registry.modelcontextprotocol.io:io.github.zereight:gitlab-mcp", "displayName": "Zereight Gitlab", "type": "application/mcp-server+json", - "url": "https://api.mcp.github.com/v0.1/servers/io.github.zereight%2Fgitlab-mcp/versions/2.2.4", + "url": "https://api.mcp.github.com/v0.1/servers/io.github.zereight%2Fgitlab-mcp/versions/2.2.5", "description": "GitLab MCP server for projects, merge requests, issues, pipelines, wiki, releases, and more.", - "version": "2.2.4", - "updatedAt": "2026-10-13T18:40:53Z", + "version": "2.2.5", + "updatedAt": "2026-10-14T03:14:07Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/zereight/gitlab-mcp#readme", "repository": "https://github.com/zereight/gitlab-mcp", "repositorySource": "github", - "stargazerCount": 2036 + "stargazerCount": 2037 } }, { @@ -31570,7 +31580,7 @@ "zpa" ], "version": "0.15.4", - "updatedAt": "2026-10-13T18:40:56Z", + "updatedAt": "2026-10-14T03:14:14Z", "metadata": { "primaryLanguage": "Python", "readmeUrl": "https://github.com/zscaler/zscaler-mcp-server#readme", @@ -31596,7 +31606,7 @@ "media-management" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:40:58Z", + "updatedAt": "2026-10-14T03:14:20Z", "metadata": { "readmeUrl": "https://github.com/imagekit-developer/skills#readme", "repository": "https://github.com/imagekit-developer/skills", @@ -31621,7 +31631,7 @@ "media-management" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:40:59Z", + "updatedAt": "2026-10-14T03:14:26Z", "metadata": { "readmeUrl": "https://github.com/imagekit-developer/skills#readme", "repository": "https://github.com/imagekit-developer/skills", @@ -31646,7 +31656,7 @@ "media-management" ], "version": "1.0.0", - "updatedAt": "2026-10-13T18:41:01Z", + "updatedAt": "2026-10-14T03:14:31Z", "metadata": { "readmeUrl": "https://github.com/imagekit-developer/skills#readme", "repository": "https://github.com/imagekit-developer/skills", @@ -31672,7 +31682,7 @@ "typescript" ], "version": "0.1.1", - "updatedAt": "2026-10-13T18:41:03Z", + "updatedAt": "2026-10-14T03:14:37Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/screen-arts/mediawork-mcp#readme", @@ -31700,7 +31710,7 @@ "model-context-protocol" ], "version": "0.1.3", - "updatedAt": "2026-10-13T18:41:04Z", + "updatedAt": "2026-10-14T03:14:43Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/pasteapp/paste-mcp#readme", @@ -31729,7 +31739,7 @@ "url-shortener" ], "version": "3.1.0", - "updatedAt": "2026-10-13T18:41:06Z", + "updatedAt": "2026-10-14T03:14:48Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/PicSeeInc/picsee-mcp#readme", @@ -31745,7 +31755,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.pingram%2Fmcp/versions/1.0.4", "description": "Send email, SMS, and voice, and manage webhooks and delivery on your Pingram account.", "version": "1.0.4", - "updatedAt": "2026-10-13T18:41:07Z", + "updatedAt": "2026-10-14T03:14:54Z", "metadata": { "readmeUrl": "https://github.com/pingram-io/mcp#readme", "repository": "https://github.com/pingram-io/mcp", @@ -31760,7 +31770,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.port%2FPort/versions/1.0.2", "description": "Port.io mcp server", "version": "1.0.2", - "updatedAt": "2026-10-13T18:41:09Z", + "updatedAt": "2026-10-14T03:15:00Z", "metadata": { "readmeUrl": "https://github.com/port-labs/remote-mcp-server#readme", "repository": "https://github.com/port-labs/remote-mcp-server", @@ -31775,7 +31785,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.shipbook%2Fmcp/versions/1.1.0", "description": "Debug production issues using Shipbook logs and Loglytics error insights.", "version": "1.1.0", - "updatedAt": "2026-10-13T18:41:10Z", + "updatedAt": "2026-10-14T03:15:05Z", "metadata": { "readmeUrl": "https://github.com/ShipBook/shipbook-mcp#readme", "repository": "https://github.com/ShipBook/shipbook-mcp", @@ -31796,7 +31806,7 @@ "sast" ], "version": "1.1304.2", - "updatedAt": "2026-10-13T18:41:12Z", + "updatedAt": "2026-10-14T03:15:11Z", "metadata": { "primaryLanguage": "Go", "readmeUrl": "https://github.com/snyk/studio-mcp#readme", @@ -31812,7 +31822,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/io.unstructured%2Ftransform/versions/0.7.2", "description": "Turn documents into structured, AI-ready data by parsing, enriching, chunking, and embedding.", "version": "0.7.2", - "updatedAt": "2026-10-13T18:41:13Z", + "updatedAt": "2026-10-14T03:15:17Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Unstructured-IO/unstructured-mcp-integrations#readme", @@ -31867,7 +31877,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/md.traveler%2Fmcp/versions/1.1.0", "description": "A traveler's portable travel profile and trip plans. It remembers, it does not search or book.", "version": "1.1.0", - "updatedAt": "2026-10-13T18:41:15Z", + "updatedAt": "2026-10-14T03:15:23Z", "metadata": { "readmeUrl": "https://github.com/TravelAiSolution/traveler-md-mcp-registry#readme", "repository": "https://github.com/TravelAiSolution/traveler-md-mcp-registry", @@ -31890,7 +31900,7 @@ "speedtest" ], "version": "1.1.4", - "updatedAt": "2026-10-13T18:41:17Z", + "updatedAt": "2026-10-14T03:15:28Z", "metadata": { "readmeUrl": "https://github.com/SpeedOfMe/speedofme-mcp#readme", "repository": "https://github.com/SpeedOfMe/speedofme-mcp", @@ -31988,7 +31998,7 @@ "readmeUrl": "https://github.com/microsoft/markitdown#readme", "repository": "https://github.com/microsoft/markitdown", "repositorySource": "github", - "stargazerCount": 189963 + "stargazerCount": 190066 } }, { @@ -32008,7 +32018,7 @@ "readmeUrl": "https://github.com/microsoft/playwright-mcp#readme", "repository": "https://github.com/microsoft/playwright-mcp", "repositorySource": "github", - "stargazerCount": 38099 + "stargazerCount": 38109 } }, { @@ -32036,7 +32046,7 @@ "readmeUrl": "https://github.com/microsoftdocs/mcp#readme", "repository": "https://github.com/microsoftdocs/mcp", "repositorySource": "github", - "stargazerCount": 1946 + "stargazerCount": 1948 } }, { @@ -32069,7 +32079,7 @@ "mcp" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:41:19Z", + "updatedAt": "2026-10-14T03:15:34Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/randall-inc/dabloons#readme", @@ -32118,7 +32128,7 @@ "model-context-protocol" ], "version": "7.0.1", - "updatedAt": "2026-10-13T18:41:20Z", + "updatedAt": "2026-10-14T03:15:40Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Wolfe-Jam/claude-faf-mcp#readme", @@ -32147,7 +32157,7 @@ "typescript" ], "version": "4.0.0", - "updatedAt": "2026-10-13T18:41:22Z", + "updatedAt": "2026-10-14T03:15:46Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/Wolfe-Jam/faf-mcp#readme", @@ -32182,7 +32192,7 @@ "readmeUrl": "https://github.com/oraios/serena#readme", "repository": "https://github.com/oraios/serena", "repositorySource": "github", - "stargazerCount": 30228 + "stargazerCount": 30237 } }, { @@ -32204,7 +32214,7 @@ "rust" ], "version": "1.3.14", - "updatedAt": "2026-10-13T18:41:25Z", + "updatedAt": "2026-10-14T03:15:52Z", "metadata": { "primaryLanguage": "Rust", "readmeUrl": "https://github.com/sylin-org/ghostlight#readme", @@ -32233,7 +32243,7 @@ "typescript" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:41:27Z", + "updatedAt": "2026-10-14T03:15:58Z", "metadata": { "primaryLanguage": "TypeScript", "readmeUrl": "https://github.com/gamedevpl/www.gamedev.pl#readme", @@ -32296,7 +32306,7 @@ "mcp-server" ], "version": "0.1.0", - "updatedAt": "2026-10-13T18:41:28Z", + "updatedAt": "2026-10-14T03:16:04Z", "metadata": { "readmeUrl": "https://github.com/metadevpro/apricot-mcp#readme", "repository": "https://github.com/metadevpro/apricot-mcp", @@ -32315,7 +32325,7 @@ "mcp-server" ], "version": "0.5.3", - "updatedAt": "2026-10-13T18:41:30Z", + "updatedAt": "2026-10-14T03:16:10Z", "metadata": { "readmeUrl": "https://github.com/metadevpro/structura-mcp#readme", "repository": "https://github.com/metadevpro/structura-mcp", @@ -32342,7 +32352,7 @@ "ai-agent" ], "version": "1.1.0", - "updatedAt": "2026-10-13T18:41:32Z", + "updatedAt": "2026-10-14T03:16:15Z", "metadata": { "readmeUrl": "https://github.com/RegAI-tw/regai-legal-mcp#readme", "repository": "https://github.com/RegAI-tw/regai-legal-mcp", @@ -32357,7 +32367,7 @@ "url": "https://api.mcp.github.com/v0.1/servers/uk.sadiqoon%2Fsakh/versions/1.0.1", "description": "Ayatollah Khamenei corpus: fatwas, lectures, knowledge graph. Arabic/Persian. Research access.", "version": "1.0.1", - "updatedAt": "2026-10-13T18:41:33Z", + "updatedAt": "2026-10-14T03:16:16Z", "metadata": { "readmeUrl": "https://github.com/SADIQOON-LTD/sakh-mcp#readme", "repository": "https://github.com/SADIQOON-LTD/sakh-mcp", @@ -32377,7 +32387,7 @@ "ttb" ], "version": "1.0.1", - "updatedAt": "2026-10-13T18:41:34Z", + "updatedAt": "2026-10-14T03:16:22Z", "metadata": { "readmeUrl": "https://github.com/cola-cloud-us/colacloud-mcp-connector#readme", "repository": "https://github.com/cola-cloud-us/colacloud-mcp-connector", @@ -32404,7 +32414,7 @@ "database" ], "version": "1.5.0", - "updatedAt": "2026-10-13T18:41:36Z", + "updatedAt": "2026-10-14T03:16:28Z", "metadata": { "readmeUrl": "https://github.com/scalixworld/scalix-cloud-mcp#readme", "repository": "https://github.com/scalixworld/scalix-cloud-mcp", @@ -32438,7 +32448,7 @@ "readmeUrl": "https://github.com/zapier/zapier-mcp#readme", "repository": "https://github.com/zapier/zapier-mcp", "repositorySource": "github", - "stargazerCount": 434 + "stargazerCount": 435 } } ] diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e7cc6c1 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Pillow==12.3.0 diff --git a/scripts/generate_ai_catalog.py b/scripts/generate_ai_catalog.py index 4bdcae1..db13025 100644 --- a/scripts/generate_ai_catalog.py +++ b/scripts/generate_ai_catalog.py @@ -1,6 +1,8 @@ #!/usr/bin/env python3 import argparse +import hashlib +import io import json import re from pathlib import Path, PurePosixPath @@ -8,6 +10,8 @@ from urllib.parse import unquote, urlencode, urlparse from urllib.request import Request, urlopen +from PIL import Image, UnidentifiedImageError + SCRIPT = Path(__file__).resolve() ROOT = SCRIPT.parents[1] SOURCE_DIR = ROOT / "catalog" @@ -23,6 +27,186 @@ CANVAS_ONLY_REQUIRED_TAGS = frozenset(("canvas", "canvas-only", "github-copilot")) NON_CANVAS_PLUGIN_TAGS = frozenset(("agent", "hook", "mcp-server", "skill")) SOURCE_SET_PATTERN = re.compile(r"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$") +ICON_METADATA_KEY = "com.github.agentfinder.icon.url" +ICON_OVERLAY = "catalog-icons.json" +MAX_ICON_BYTES = 256 * 1024 +MAX_ICON_DIMENSION = 512 +ICON_PATH_PATTERN = re.compile( + r"/github/agentfinder-catalog/[0-9a-f]{40}/" + r"(icons/[A-Za-z0-9_-][A-Za-z0-9_.-]*/[A-Za-z0-9_-][A-Za-z0-9_.-]*\.png)" +) + + +def validate_png(content, source): + if len(content) > MAX_ICON_BYTES: + fail(f"{source}: asset exceeds {MAX_ICON_BYTES} bytes") + try: + with Image.open(io.BytesIO(content), formats=["PNG"]) as image: + if not all(1 <= dimension <= MAX_ICON_DIMENSION for dimension in image.size): + fail(f"{source}: PNG dimensions must be between 1 and {MAX_ICON_DIMENSION}") + image.verify() + # Verification checks file integrity; reopening also exercises actual decoding. + with Image.open(io.BytesIO(content), formats=["PNG"]) as image: + if getattr(image, "is_animated", False): + fail(f"{source}: animated PNGs are not supported") + image.load() + except (UnidentifiedImageError, OSError, SyntaxError, ValueError, IndexError, + Image.DecompressionBombError) as error: + fail(f"{source}: invalid PNG: {error}") + + +def validate_icon_url(value, source): + if not isinstance(value, str): + fail(f"{source}: url must be a string") + try: + url = urlparse(value) + url.port + except ValueError: + fail(f"{source}: url must be a valid commit-pinned raw GitHub URL") + match = ICON_PATH_PATTERN.fullmatch(url.path) + if ( + url.scheme != "https" or url.netloc != "raw.githubusercontent.com" + or url.query or url.fragment or "?" in value or "#" in value + or not match or value != url.geturl() + ): + fail( + f"{source}: url must be an HTTPS raw.githubusercontent.com URL for " + "github/agentfinder-catalog/<40-hex-commit>/icons//.png" + ) + return Path(match[1]) + + +def validate_provenance_url(value, source): + if not isinstance(value, str) or any(character.isspace() for character in value): + fail(f"{source}: must be a public absolute HTTPS URL") + try: + url = urlparse(value) + hostname = url.hostname + port = url.port + except ValueError: + fail(f"{source}: must be a valid public absolute HTTPS URL") + if ( + url.scheme != "https" or not hostname or "\\" in value + or url.username is not None or url.password is not None or port is not None + ): + fail(f"{source}: must be a public absolute HTTPS URL without credentials or ports") + + +def validate_icon_asset(declaration, source): + relative = validate_icon_url(declaration.get("url"), source) + provenance = declaration.get("provenance") + licensed_fields = {"sourceUrl", "license", "permissionUrl", "sha256"} + approval_fields = {"sourceUrl", "approval", "sha256"} + if ( + not isinstance(provenance, dict) + or set(provenance) not in (licensed_fields, approval_fields) + ): + fail( + f"{source}: provenance must contain sourceUrl and sha256, plus either " + "license and permissionUrl, or an explicit approval attestation" + ) + validate_provenance_url(provenance["sourceUrl"], f"{source}: provenance.sourceUrl") + if "approval" in provenance: + if not isinstance(provenance["approval"], str) or not provenance["approval"].strip(): + fail(f"{source}: provenance.approval must be a non-empty redistribution attestation") + else: + validate_provenance_url(provenance["permissionUrl"], f"{source}: provenance.permissionUrl") + license_name = provenance["license"] + if not isinstance(license_name, str) or not license_name.strip(): + fail(f"{source}: provenance.license must be a non-empty license or permission label") + digest = provenance["sha256"] + if not isinstance(digest, str) or not re.fullmatch(r"[0-9a-f]{64}", digest): + fail(f"{source}: provenance.sha256 must be a lowercase SHA-256 hex digest") + path = ROOT / relative + try: + if any( + (ROOT / Path(*relative.parts[:index])).is_symlink() + for index in range(1, len(relative.parts) + 1) + ): + fail(f"{source}: asset path must not contain symlinks") + if not path.resolve().is_relative_to((ROOT / "icons").resolve()): + fail(f"{source}: asset must stay within icons/") + with path.open("rb") as asset: + content = asset.read(MAX_ICON_BYTES + 1) + except OSError as error: + fail(f"{source}: cannot read asset {relative}: {error}") + if len(content) > MAX_ICON_BYTES: + fail(f"{source}: asset exceeds {MAX_ICON_BYTES} bytes") + if hashlib.sha256(content).hexdigest() != digest: + fail(f"{source}: asset SHA-256 does not match provenance.sha256") + validate_png(content, source) + + +def load_icon_declarations(): + path = ROOT / ICON_OVERLAY + if path.is_symlink(): + fail(f"{ICON_OVERLAY}: overlay must not be a symlink") + if not path.exists(): + return [] + + def unique_object(pairs): + result = {} + for key, value in pairs: + if key in result: + fail(f"{ICON_OVERLAY}: duplicate JSON key {key}") + result[key] = value + return result + + try: + document = json.loads(path.read_text(encoding="utf-8"), object_pairs_hook=unique_object) + except (OSError, UnicodeError, json.JSONDecodeError) as error: + fail(f"{ICON_OVERLAY}: cannot load JSON: {error}") + if ( + not isinstance(document, dict) or set(document) != {"icons"} + or not isinstance(document["icons"], list) + ): + fail(f"{ICON_OVERLAY}: expected an object containing only an icons array") + seen = {} + for index, declaration in enumerate(document["icons"]): + source = f"{ICON_OVERLAY} icons[{index}]" + if ( + not isinstance(declaration, dict) + or not {"identifier", "url", "provenance"}.issubset(declaration) + or set(declaration) - {"identifier", "version", "url", "provenance"} + ): + fail(f"{source}: expected identifier, optional version, url, and provenance") + identifier = declaration["identifier"] + if not isinstance(identifier, str) or not re.fullmatch( + r"urn:air:[A-Za-z0-9.-]+(?::[A-Za-z0-9._-]+)+", identifier + ): + fail(f"{source}: identifier must be an exact generated urn:air: identity") + version = declaration.get("version") + if "version" in declaration and ( + not isinstance(version, str) or not version.strip() + ): + fail(f"{source}: version must be a non-empty string when supplied") + versions = seen.setdefault(identifier, set()) + if version in versions or (versions and (version is None or None in versions)): + fail(f"{source}: overlapping icon declarations for {identifier}") + versions.add(version) + validate_icon_asset(declaration, source) + return document["icons"] + + +def apply_icon_declarations(entries, declarations): + by_identifier = {} + for entry in entries: + by_identifier.setdefault(entry["identifier"], []).append(entry) + for index, declaration in enumerate(declarations): + matches = [ + entry for entry in by_identifier.get(declaration["identifier"], ()) + if "version" not in declaration or entry.get("version") == declaration["version"] + ] + if not matches: + fail( + f"{ICON_OVERLAY} icons[{index}]: unmatched icon declaration for " + f"{declaration['identifier']} {declaration.get('version', '(all versions)')}" + ) + for entry in matches: + entry["metadata"] = { + **(entry.get("metadata") or {}), + ICON_METADATA_KEY: declaration["url"], + } def fail(message): @@ -60,6 +244,8 @@ def validate_repository_metadata(metadata, source): return if not isinstance(metadata, dict): fail(f"{source}: metadata must be an object") + if ICON_METADATA_KEY in metadata: + fail(f"{source}: {ICON_METADATA_KEY} must be declared through {ICON_OVERLAY}") source_set = metadata.get("sourceSet") repo_path = metadata.get("repoPath") @@ -257,6 +443,7 @@ def display_name(entry, registry_record=None): def generate(): + icon_declarations = load_icon_declarations() entries = [] identities = set() local_identifiers = set() @@ -308,6 +495,8 @@ def add(entry, source): generated["displayName"] = name add(generated, source) + apply_icon_declarations(entries, icon_declarations) + if len(entries) > MAX_ENTRIES: fail(f"catalog has {len(entries)} entries; limit is {MAX_ENTRIES}") diff --git a/tests/test_catalog_workflow.py b/tests/test_catalog_workflow.py index 3ab263f..abb3846 100644 --- a/tests/test_catalog_workflow.py +++ b/tests/test_catalog_workflow.py @@ -19,6 +19,12 @@ def test_refresh_triggers_and_publication_guard(self): self.assertIn(" workflow_dispatch:\n", WORKFLOW) self.assertIn(" push:\n branches:\n - main\n", WORKFLOW) self.assertIn(" pull_request:\n paths:\n", WORKFLOW) + for path in ("catalog-icons.json", "icons/**", "CONTRIBUTING.md", "README.md", "requirements.txt"): + self.assertIn(f' - "{path}"\n', WORKFLOW) + self.assertLess( + WORKFLOW.index("python3 -m pip install -r requirements.txt"), + WORKFLOW.index("python3 -m unittest discover -s tests"), + ) self.assertIn( " if: (github.event_name == 'push' || " "github.event_name == 'schedule' || " diff --git a/tests/test_generate_ai_catalog.py b/tests/test_generate_ai_catalog.py index ed7dc45..3a47268 100644 --- a/tests/test_generate_ai_catalog.py +++ b/tests/test_generate_ai_catalog.py @@ -1,14 +1,399 @@ +import hashlib +import io import json import re +import struct import tempfile import unittest +import zlib from pathlib import Path from urllib.parse import parse_qs, urlparse from unittest.mock import patch +from PIL import Image + from scripts import generate_ai_catalog +class CatalogIconsTest(unittest.TestCase): + COMMIT = "0123456789abcdef0123456789abcdef01234567" + URL = ( + "https://raw.githubusercontent.com/github/agentfinder-catalog/" + f"{COMMIT}/icons/example/weather.png" + ) + IDENTIFIER = "urn:air:registry.modelcontextprotocol.io:example:weather" + + @staticmethod + def chunk(kind, payload): + return ( + struct.pack(">I", len(payload)) + kind + payload + + struct.pack(">I", zlib.crc32(kind + payload)) + ) + + @classmethod + def png(cls, width=1, height=1, pixel=b"\x00\x00\x00\xff", interlace=0): + header = struct.pack(">IIBBBBB", width, height, 8, 6, 0, 0, interlace) + pixels = (b"\x00" + pixel * width) * height + return ( + b"\x89PNG\r\n\x1a\n" + cls.chunk(b"IHDR", header) + + cls.chunk(b"IDAT", zlib.compress(pixels)) + cls.chunk(b"IEND", b"") + ) + + def setUp(self): + temporary = tempfile.TemporaryDirectory() + self.addCleanup(temporary.cleanup) + self.root = Path(temporary.name) + self.asset = self.root / "icons/example/weather.png" + self.asset.parent.mkdir(parents=True) + self.asset.write_bytes(self.png()) + self.overlay = self.root / "catalog-icons.json" + self.source = self.root / "catalog/example" + self.source.mkdir(parents=True) + self.remote = { + "identifier": "urn:ai:registry.modelcontextprotocol.io:example:weather", + "displayName": "Weather", + "type": "application/mcp-server+json", + "version": "1.0.0", + "url": "https://api.mcp.github.com/v0.1/servers/example%2Fweather/versions/1.0.0", + "metadata": { + "repository": "https://github.com/example/weather", + "connectorId": "unchanged", + "materialization": {"nativeUrl": "https://example.com/install"}, + }, + } + self.local = { + "identifier": "urn:ai:github.com:example:skills:weather", + "displayName": "Weather skill", + "mediaType": "application/ai-skill", + "url": "https://github.com/example/skills/blob/main/weather/SKILL.md", + "metadata": {"sourceSet": "example/skills", "repoPath": "weather/SKILL.md"}, + } + (self.source / "weather.json").write_text(json.dumps(self.local), encoding="utf-8") + for patcher in ( + patch.object(generate_ai_catalog, "ROOT", self.root), + patch.object(generate_ai_catalog, "SOURCE_DIR", self.root / "catalog"), + patch.object(generate_ai_catalog, "load_mcp_entries", return_value=[self.remote]), + patch.object(generate_ai_catalog, "load_mcp_registry_records", return_value=[]), + ): + patcher.start() + self.addCleanup(patcher.stop) + + def declaration(self, **changes): + return { + "identifier": self.IDENTIFIER, + "url": self.URL, + "provenance": { + "sourceUrl": "https://example.com/weather-artwork", + "license": "CC0-1.0", + "permissionUrl": "https://example.com/weather-artwork-permission", + "sha256": hashlib.sha256(self.asset.read_bytes()).hexdigest(), + }, + } | changes + + def write_overlay(self, *declarations): + self.overlay.write_text(json.dumps({"icons": declarations}), encoding="utf-8") + + def generate(self): + rendered, count = generate_ai_catalog.generate() + entries = json.loads(rendered)["entries"] + self.assertEqual(len(entries), count) + return rendered, entries + + def test_empty_and_absent_overlay_are_byte_identical(self): + baseline, _ = self.generate() + self.write_overlay() + rendered, _ = self.generate() + self.assertEqual(rendered, baseline) + + def test_local_and_imported_icons_preserve_every_other_field(self): + _, baseline = self.generate() + source_bytes = (self.source / "weather.json").read_bytes() + remote_bytes = json.dumps(self.remote) + local_id = self.local["identifier"].replace("urn:ai:", "urn:air:", 1) + self.write_overlay(self.declaration(), self.declaration(identifier=local_id)) + rendered, entries = self.generate() + self.assertEqual(len(entries), 2) + self.assertNotIn(b"provenance", rendered) + self.assertNotIn(b"metadata.github.icon.url", rendered) + for before, after in zip(baseline, entries): + self.assertEqual( + after, + before | {"metadata": before["metadata"] | { + generate_ai_catalog.ICON_METADATA_KEY: self.URL, + }}, + ) + self.assertEqual((self.source / "weather.json").read_bytes(), source_bytes) + self.assertEqual(json.dumps(self.remote), remote_bytes) + self.write_overlay(self.declaration(identifier=local_id), self.declaration()) + self.assertEqual(self.generate()[0], rendered) + + def test_inline_data_and_missing_metadata_are_preserved(self): + inline = self.local.copy() + inline.pop("url") + inline.pop("metadata") + inline["data"] = {"nativeConfig": {"endpoint": "https://example.com/install"}} + (self.source / "weather.json").write_text(json.dumps(inline), encoding="utf-8") + _, baseline = self.generate() + self.write_overlay(self.declaration(identifier=baseline[0]["identifier"])) + _, entries = self.generate() + self.assertEqual(entries[0], baseline[0] | { + "metadata": {generate_ai_catalog.ICON_METADATA_KEY: self.URL}, + }) + self.assertEqual(entries[1], baseline[1]) + + def test_exact_generated_fixture(self): + self.remote.pop("metadata") + self.write_overlay(self.declaration()) + _, entries = self.generate() + self.assertEqual(entries[1], { + "identifier": self.IDENTIFIER, + "displayName": "Weather", + "type": "application/mcp-server+json", + "version": "1.0.0", + "url": "https://api.mcp.github.com/v0.1/servers/example%2Fweather/versions/1.0.0", + "metadata": {"com.github.agentfinder.icon.url": self.URL}, + }) + + def test_local_shadowing_of_registry_entries_is_unchanged(self): + self.remote["identifier"] = self.local["identifier"] + identifier = self.local["identifier"].replace("urn:ai:", "urn:air:", 1) + self.write_overlay(self.declaration(identifier=identifier)) + _, entries = self.generate() + self.assertEqual(len(entries), 1) + self.assertEqual(entries[0]["url"], self.local["url"]) + + def test_optional_version_and_registry_rollover(self): + second = self.remote | {"version": "2.0.0", "url": self.remote["url"].replace("1.0.0", "2.0.0")} + with patch.object(generate_ai_catalog, "load_mcp_entries", return_value=[self.remote, second]): + self.write_overlay(self.declaration(version="1.0.0")) + _, entries = self.generate() + self.assertIn(generate_ai_catalog.ICON_METADATA_KEY, entries[1]["metadata"]) + self.assertNotIn(generate_ai_catalog.ICON_METADATA_KEY, entries[2]["metadata"]) + self.write_overlay(self.declaration()) + _, entries = self.generate() + self.assertTrue(all( + entry["metadata"][generate_ai_catalog.ICON_METADATA_KEY] == self.URL + for entry in entries[1:] + )) + self.write_overlay(self.declaration(version="1.0.0"), self.declaration(version="2.0.0")) + _, exact = self.generate() + self.assertEqual(exact, entries) + with patch.object(generate_ai_catalog, "load_mcp_entries", return_value=[second]): + self.write_overlay(self.declaration()) + self.generate() + self.write_overlay(self.declaration(version="1.0.0")) + with self.assertRaisesRegex(SystemExit, r"icons\[0\].*unmatched.*1\.0\.0"): + self.generate() + + def test_add_replace_remove_is_reversible_and_deterministic(self): + baseline, _ = self.generate() + self.write_overlay(self.declaration()) + added, _ = self.generate() + self.assertNotEqual(added, baseline) + self.assertEqual(added, self.generate()[0]) + self.asset.write_bytes(self.png(pixel=b"\xff\x00\x00\xff")) + replacement = self.URL.replace(self.COMMIT, "f" * 40) + self.write_overlay(self.declaration(url=replacement)) + replaced, entries = self.generate() + self.assertNotEqual(added, replaced) + self.assertEqual(entries[1]["metadata"][generate_ai_catalog.ICON_METADATA_KEY], replacement) + self.write_overlay() + self.assertEqual(self.generate()[0], baseline) + + def test_overlap_and_unmatched_declarations_fail(self): + for declarations, message in ( + ([self.declaration(), self.declaration()], "overlapping"), + ([self.declaration(), self.declaration(version="1.0.0")], "overlapping"), + ([self.declaration(version="1.0.0"), self.declaration()], "overlapping"), + ([self.declaration(version="1.0.0"), self.declaration(version="1.0.0")], "overlapping"), + ([self.declaration(identifier=self.IDENTIFIER + "-missing")], "unmatched"), + ): + with self.subTest(declarations=declarations): + self.write_overlay(*declarations) + with self.assertRaisesRegex(SystemExit, message): + self.generate() + + def test_invalid_overlay_shapes_and_duplicate_keys(self): + for document in ( + "{", "null", "[]", "{}", '{"icons":{}}', '{"icons":[],"other":1}', + '{"icons":[],"icons":[]}', '{"icons":[{"identifier":"a","identifier":"b"}]}', + ): + with self.subTest(document=document): + self.overlay.write_text(document, encoding="utf-8") + with self.assertRaisesRegex(SystemExit, "catalog-icons.json"): + self.generate() + for declaration in ( + None, [], {}, self.declaration(extra=True), + self.declaration(identifier=self.remote["identifier"]), + self.declaration(identifier=None), + self.declaration(version=None), self.declaration(version=""), self.declaration(version=1), + ): + with self.subTest(declaration=declaration): + self.write_overlay(declaration) + with self.assertRaisesRegex(SystemExit, r"catalog-icons.json icons\[0\]"): + self.generate() + + def test_invalid_urls(self): + for url in ( + None, 1, "", "/relative.png", self.URL.replace("https:", "http:"), + self.URL.replace("raw.githubusercontent.com", "raw.githubusercontent.com.evil.test"), + self.URL.replace("raw.githubusercontent.com", "github.com"), + self.URL.replace("raw.githubusercontent.com", "raw.githubusercontent.com:443"), + self.URL.replace("raw.githubusercontent.com", "user@raw.githubusercontent.com"), + self.URL.replace("github/agentfinder-catalog", "other/repository"), + self.URL.replace(self.COMMIT, "main"), self.URL.replace(self.COMMIT, "a" * 39), + self.URL.replace("icons/example", "icons/../example"), + self.URL.replace("weather.png", "%77eather.png"), + self.URL.replace("weather.png", "weather.svg"), + self.URL.replace("icons/example", "icons\\example"), + self.URL + "?download=1", self.URL + "#image", self.URL + "?", self.URL + "#", + self.URL.replace("https://", "https://[invalid/"), "\n" + self.URL, + ): + with self.subTest(url=url): + self.write_overlay(self.declaration(url=url)) + with self.assertRaisesRegex(SystemExit, "url must"): + self.generate() + + def test_invalid_provenance_and_missing_assets(self): + base = self.declaration()["provenance"] + for provenance in ( + None, [], {}, base | {"extra": "field"}, base | {"license": ""}, + base | {"sourceUrl": "relative"}, base | {"permissionUrl": "http://example.com"}, + base | {"permissionUrl": "https://user@example.com"}, + base | {"sourceUrl": "https://example.com:443/file"}, + base | {"sourceUrl": "https://[invalid"}, base | {"sourceUrl": "https://example.com/a b"}, + base | {"sha256": "not-a-digest"}, base | {"sha256": "A" * 64}, + base | {"sha256": "a" * 64}, + ): + with self.subTest(provenance=provenance): + self.write_overlay(self.declaration(provenance=provenance)) + with self.assertRaisesRegex(SystemExit, "provenance"): + self.generate() + self.write_overlay(self.declaration(url=self.URL.replace("weather.png", "missing.png"))) + with self.assertRaisesRegex(SystemExit, "cannot read asset"): + self.generate() + + def test_explicit_redistribution_approval_without_fabricated_license(self): + provenance = self.declaration()["provenance"] + provenance.pop("license") + provenance.pop("permissionUrl") + provenance["approval"] = "Selected artwork approved for public redistribution." + self.write_overlay(self.declaration(provenance=provenance)) + rendered, _ = self.generate() + self.assertNotIn(b"approval", rendered) + for invalid in ( + provenance | {"approval": ""}, + provenance | {"approval": None}, + provenance | {"license": "invented"}, + {key: value for key, value in provenance.items() if key != "approval"}, + ): + with self.subTest(provenance=invalid): + self.write_overlay(self.declaration(provenance=invalid)) + with self.assertRaisesRegex(SystemExit, "provenance"): + self.generate() + + def test_symlink_asset_and_overlay_rejected(self): + link = self.asset.with_name("link.png") + link.symlink_to(self.asset) + self.write_overlay(self.declaration(url=self.URL.replace("weather.png", "link.png"))) + with self.assertRaisesRegex(SystemExit, "symlinks"): + self.generate() + (self.root / "icons/alias").symlink_to(self.root, target_is_directory=True) + self.write_overlay(self.declaration(url=self.URL.replace("icons/example", "icons/alias"))) + with self.assertRaisesRegex(SystemExit, "symlinks"): + self.generate() + self.overlay.unlink() + self.overlay.symlink_to(self.asset) + with self.assertRaisesRegex(SystemExit, "overlay must not be a symlink"): + self.generate() + + def test_asset_size_dimensions_and_png_integrity(self): + for content, message in ( + (b"not a PNG", "invalid PNG"), + (self.png(0, 1), "invalid PNG"), (self.png(513, 1), "dimensions"), + (self.png(1, 513), "dimensions"), + (self.png()[:30], "invalid PNG"), + (self.png()[:-12], "invalid PNG"), + (self.png().replace(b"IDAT", b"JDAT"), "invalid PNG"), + (self.png() + b"\0" * generate_ai_catalog.MAX_ICON_BYTES, "exceeds"), + ): + with self.subTest(message=message): + self.asset.write_bytes(content) + self.write_overlay(self.declaration()) + with self.assertRaisesRegex(SystemExit, message): + self.generate() + png = self.png() + padding = self.chunk(b"tEXt", b"comment\0" + b"x" * ( + generate_ai_catalog.MAX_ICON_BYTES - len(png) - 12 - 8 + )) + at_limit = png[:33] + padding + png[33:] + self.assertEqual(len(at_limit), generate_ai_catalog.MAX_ICON_BYTES) + for content in (self.png(512, 512), self.png(interlace=1), at_limit): + self.asset.write_bytes(content) + self.write_overlay(self.declaration()) + self.generate() + + def test_png_palette_and_adam7_layout(self): + signature = b"\x89PNG\r\n\x1a\n" + end = self.chunk(b"IEND", b"") + indexed = self.chunk(b"IHDR", struct.pack(">IIBBBBB", 1, 1, 1, 3, 0, 0, 0)) + palette = self.chunk(b"PLTE", b"\0\0\0") + data = self.chunk(b"IDAT", zlib.compress(b"\0\0")) + rgba = self.chunk(b"IHDR", struct.pack(">IIBBBBB", 2, 2, 8, 6, 0, 0, 1)) + # A 2x2 Adam7 image has one pixel in passes 1 and 6, and two in pass 7. + interlaced = self.chunk(b"IDAT", zlib.compress( + b"\0" + b"\xff\0\0\xff" + b"\0" + b"\0\xff\0\xff" + + b"\0" + b"\xff\0\0\xff" + b"\0\xff\0\xff" + )) + for chunks in ([indexed, palette, data, end], [rgba, interlaced, end]): + self.asset.write_bytes(signature + b"".join(chunks)) + self.write_overlay(self.declaration()) + self.generate() + + def test_png_decode_errors_are_rejected(self): + header = self.chunk(b"IHDR", struct.pack(">IIBBBBB", 1, 1, 8, 6, 0, 0, 0)) + signature = b"\x89PNG\r\n\x1a\n" + end = self.chunk(b"IEND", b"") + for chunks in ( + [header, self.chunk(b"IDAT", zlib.compress(b"\x05" + b"\0" * 4)), end], + [header, self.chunk(b"IDAT", b"not compressed image data"), end], + [header, end], + [self.chunk(b"IDAT", zlib.compress(b"\0" * 5)), header, end], + ): + with self.subTest(chunks=chunks): + self.asset.write_bytes(signature + b"".join(chunks)) + self.write_overlay(self.declaration()) + with self.assertRaisesRegex(SystemExit, "invalid PNG"): + self.generate() + + def test_animation_and_other_formats_are_rejected(self): + first = Image.new("RGBA", (2, 2), "red") + second = Image.new("RGBA", (2, 2), "blue") + animated = io.BytesIO() + first.save(animated, format="PNG", save_all=True, append_images=[second]) + gif = io.BytesIO() + first.save(gif, format="GIF") + for content, message in ( + (animated.getvalue(), "animated PNG"), + (gif.getvalue(), "invalid PNG"), + ): + self.asset.write_bytes(content) + self.write_overlay(self.declaration()) + with self.assertRaisesRegex(SystemExit, message): + self.generate() + + def test_reserved_key_cannot_bypass_overlay_review(self): + self.local["metadata"][generate_ai_catalog.ICON_METADATA_KEY] = self.URL + (self.source / "weather.json").write_text(json.dumps(self.local), encoding="utf-8") + with self.assertRaisesRegex(SystemExit, "must be declared through catalog-icons.json"): + self.generate() + self.local["metadata"].pop(generate_ai_catalog.ICON_METADATA_KEY) + (self.source / "weather.json").write_text(json.dumps(self.local), encoding="utf-8") + self.remote["metadata"][generate_ai_catalog.ICON_METADATA_KEY] = self.URL + with self.assertRaisesRegex(SystemExit, "must be declared through catalog-icons.json"): + self.generate() + + class ValidateEntryTest(unittest.TestCase): @staticmethod def canvas_entry(): @@ -482,6 +867,9 @@ def test_power_bi_uses_only_registry_entry_across_version_updates(self): }, } with ( + patch.object( + generate_ai_catalog, "load_icon_declarations", return_value=[] + ), patch.object( generate_ai_catalog, "load_mcp_entries", return_value=[remote] ),