{"id":2971,"date":"2025-12-03T13:52:38","date_gmt":"2025-12-03T13:52:38","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/12\/03\/securing-the-docker-mcp-catalog-commit-pinning-agentic-auditing-and-publisher-trust-levels\/"},"modified":"2025-12-03T13:52:38","modified_gmt":"2025-12-03T13:52:38","slug":"securing-the-docker-mcp-catalog-commit-pinning-agentic-auditing-and-publisher-trust-levels","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/12\/03\/securing-the-docker-mcp-catalog-commit-pinning-agentic-auditing-and-publisher-trust-levels\/","title":{"rendered":"Securing the Docker MCP Catalog: Commit Pinning, Agentic Auditing, and Publisher Trust Levels"},"content":{"rendered":"<p>Trust is the most important consideration when you connect AI assistants to real tools. While <a href=\"https:\/\/www.docker.com\/blog\/docker-mcp-catalog-secure-way-to-discover-and-run-mcp-servers\/\">MCP containerization<\/a> provides strong isolation and limits the blast radius of malfunctioning or compromised servers, we\u2019re continuously strengthening trust and security across the Docker MCP solutions to further reduce exposure to malicious code. As the MCP ecosystem scales from hundreds to tens of thousands of servers (and beyond), we need stronger mechanisms to prove what code is running, how it was built, and why it\u2019s trusted.<\/p>\n<p>To strengthen trust across the entire MCP lifecycle, from submission to maintenance to daily use, we\u2019ve introduced three key enhancements:<\/p>\n<ol class=\"wp-block-list\">\n<li><strong>Commit Pinning<\/strong>: Every Docker-built MCP server in the Docker <a href=\"https:\/\/github.com\/docker\/mcp-registry\" rel=\"nofollow noopener\" target=\"_blank\">MCP Registry<\/a> (the source of truth for the <a href=\"https:\/\/hub.docker.com\/mcp\" rel=\"nofollow noopener\" target=\"_blank\">MCP Catalog<\/a>) is now tied to a specific Git commit, making each release precisely attributable and verifiable.<\/li>\n<li><strong>Automated, AI-Audited Updates<\/strong>: A new update workflow keeps submitted MCP servers current, while agentic reviews of incoming changes make vigilance scalable and traceable.<\/li>\n<li><strong>Publisher Trust Levels<\/strong>: We\u2019ve introduced clearer trust indicators in the MCP Catalog, so developers can easily distinguish between official, verified servers and community-contributed entries.<\/li>\n<\/ol>\n<p>These updates raise the bar on transparency and security for everyone building with and using MCP at scale with Docker.<\/p>\n\n<h2 class=\"wp-block-heading\">Commit pins for local MCP servers<\/h2>\n<p>Local MCP servers in the Docker MCP Registry are now tied to a specific Git commit with <strong>source.commit<\/strong>. That commit hash is a cryptographic fingerprint for the exact revision of the server code that we build and publish. Without this pinning, a reference like <strong>latest<\/strong> or a branch name would build whatever happens to be at that reference right now, making builds non-deterministic and vulnerable to supply chain attacks if an upstream repository is compromised. Even Git tags aren\u2019t really immutable since they can be deleted and recreated to point to another commit. By contrast, commit hashes are cryptographically linked to the content they address, making the outcome of an audit of that commit a persistent result.<\/p>\n<p>To make things easier, we\u2019ve updated our authoring tools (like the handy <a href=\"https:\/\/github.com\/docker\/mcp-registry\/blob\/main\/cmd\/wizard\/main.go\" rel=\"nofollow noopener\" target=\"_blank\">MCP Registry Wizard<\/a>) to automatically add this commit pin when creating a new server entry, and we now <a href=\"https:\/\/github.com\/docker\/mcp-registry\/blob\/6c74824f98f731c289357f31ca7495f41fa402d9\/cmd\/validate\/main.go#L46-L48\" rel=\"nofollow noopener\" target=\"_blank\">enforce the presence of a commit pin in our CI pipeline<\/a> (missing or malformed pins will fail validation). This enforcement is deliberate: it\u2019s impossible to accidentally publish a server without establishing clear provenance for the code being distributed. We also propagate the pin into the MCP server image metadata via the <strong>org.opencontainers.image.revision<\/strong> label for traceability.<\/p>\n<p>Here\u2019s an example of what this looks like in the registry:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\">\n# servers\/aws-cdk-mcp-server\/server.yaml\nname: aws-cdk-mcp-server\nimage: mcp\/aws-cdk-mcp-server\ntype: server\nmeta:\n  category: devops\n  tags:\n    - aws-cdk-mcp-server\n    - devops\nabout:\n  title: AWS CDK\n  description: AWS Cloud Development Kit (CDK) best practices, infrastructure as code patterns, and security compliance with CDK Nag.\n  icon: https:\/\/avatars.githubusercontent.com\/u\/3299148?v=4\nsource:\n  project: https:\/\/github.com\/awslabs\/mcp\n  commit: 7bace1f81455088b6690a44e99cabb602259ddf7\n  directory: src\/cdk-mcp-server\n\n<\/pre>\n<\/div>\n<p>And here\u2019s an example of how you can verify the commit pin for a published MCP server image:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\">\n$ docker image inspect mcp\/aws-core-mcp-server:latest \n    --format '{{index .Config.Labels \"org.opencontainers.image.revision\"}}'\n7bace1f81455088b6690a44e99cabb602259ddf7\n\n<\/pre>\n<\/div>\n<p>In fact, if you have the <strong>cosign<\/strong> and <strong>jq<\/strong> commands available, you can perform additional verifications:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\">\n$ COSIGN_REPOSITORY=mcp\/signatures cosign verify mcp\/aws-cdk-mcp-server --key https:\/\/raw.githubusercontent.com\/docker\/keyring\/refs\/heads\/main\/public\/mcp\/latest.pub | jq -r ' .[].optional[\"org.opencontainers.image.revision\"] '\n\nVerification for index.docker.io\/mcp\/aws-cdk-mcp-server:latest --\nThe following checks were performed on each of these signatures:\n  - The cosign claims were validated\n  - Existence of the claims in the transparency log was verified offline\n  - The signatures were verified against the specified public key\n7bace1f81455088b6690a44e99cabb602259ddf7\n\n<\/pre>\n<\/div>\n<h3 class=\"wp-block-heading\">Keeping in sync<\/h3>\n<p>Once a server is in the registry, we don\u2019t want maintainers needing to hand\u2011edit pins every time they merge something into their upstream repos (they have better things to do with their time), so a <a href=\"https:\/\/github.com\/docker\/mcp-registry\/blob\/main\/.github\/workflows\/update-pins.yaml\" rel=\"nofollow noopener\" target=\"_blank\">new automated workflow<\/a> scans upstreams nightly, bumping <strong>source.commit<\/strong> when there\u2019s a newer revision, and opening an auditable PR in the registry to track the incoming upstream changes.\u00a0 This gives you the security benefits of pinning (immutable references to reviewed code) without the maintenance toil. Updates still flow through pull requests, so you get a review gate and approval trail showing exactly what new code is entering your supply chain. The update workflow operates on a per-server basis, with each server update getting its own branch and pull request.<\/p>\n<p>This raises the question, though: how do we know that the incoming changes are safe?<\/p>\n<h2 class=\"wp-block-heading\">AI in the review loop, humans in charge<\/h2>\n<p>Every proposed commit pin bump (and any new local server) will now be subject to an <strong>agentic AI security review<\/strong> of the incoming upstream changes. The reviewers (<a href=\"https:\/\/www.claude.com\/product\/claude-code\" rel=\"nofollow noopener\" target=\"_blank\">Claude Code<\/a> and <a href=\"https:\/\/openai.com\/codex\/\" rel=\"nofollow noopener\" target=\"_blank\">OpenAI Codex<\/a>) analyze MCP server behavior, flagging risky or malicious code, adding structured reports to the PR, and offering standardized labels such as <strong>security-risk:high<\/strong> or <strong>security-blocked<\/strong>. Humans remain in the loop for final judgment, but the agents are relentless and scalable.<\/p>\n<h3 class=\"wp-block-heading\">The challenge: untrusted code means untrusted agents<\/h3>\n<p>When you run AI agents in CI to analyze untrusted code, you face a fundamental problem: the agents themselves become attack vectors. They\u2019re susceptible to <a href=\"https:\/\/www.docker.com\/blog\/mcp-horror-stories-github-prompt-injection\/\">prompt injection<\/a> through carefully crafted code comments, file names, or repository structure. A malicious PR could attempt to manipulate the reviewing agent into approving dangerous changes, exfiltrating secrets, or modifying the review process itself.<\/p>\n<p>We can\u2019t trust the code under review, but we also can\u2019t fully trust the agents reviewing it.<\/p>\n<h3 class=\"wp-block-heading\">Isolated agents<\/h3>\n<p>Our <a href=\"https:\/\/docs.docker.com\/compose\/\" rel=\"nofollow noopener\" target=\"_blank\">Compose<\/a>-based <a href=\"https:\/\/github.com\/docker\/mcp-registry\/tree\/main\/agents\/security-reviewer\" rel=\"nofollow noopener\" target=\"_blank\">security reviewer architecture<\/a> addresses this trust problem by treating the AI agents as untrusted components. The agents run inside heavily isolated Docker containers with tightly controlled inputs and outputs:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>The code being audited is mounted read-only<\/strong> \u2014 The agent can analyze code but never modify it. Moreover, the code it audits is just a temporary copy of the upstream repository, but the read-only access means that the agent can\u2019t do something like modify a script that might be accidentally executed outside the container.<\/li>\n<li><strong>The agent can only write to an isolated output directory<\/strong> \u2014 Once the output is written, the CLI wrapper for the agent only extracts specific files (a Markdown report and a text file of labels, both with fixed names), meaning any malicious scripts or files that might be written to that directory are deleted.<\/li>\n<li><strong>The agent lacks direct Internet access<\/strong> \u2014 the reviewer container cannot reach external services.<\/li>\n<li><strong>CI secrets and API credentials never enter the reviewer container<\/strong> \u2014 Instead, a lightweight <a href=\"https:\/\/github.com\/docker\/mcp-registry\/blob\/main\/agents\/security-reviewer\/proxy\/main.go\" rel=\"nofollow noopener\" target=\"_blank\">reverse proxy<\/a> on a separate <a href=\"https:\/\/docs.docker.com\/engine\/network\/\" rel=\"nofollow noopener\" target=\"_blank\">Docker network<\/a> accepts requests from the reviewer, injects inference provider API keys on outbound requests, and shields those keys from the containerized code under review.<\/li>\n<\/ul>\n<p>All of this is encapsulated in a <a href=\"https:\/\/github.com\/docker\/mcp-registry\/blob\/main\/agents\/security-reviewer\/compose.yml\" rel=\"nofollow noopener\" target=\"_blank\">Docker Compose stack<\/a> and wrapped by a <a href=\"https:\/\/github.com\/docker\/mcp-registry\/blob\/main\/cmd\/security-reviewer\/main.go\" rel=\"nofollow noopener\" target=\"_blank\">convenient CLI<\/a> that allows running the agent both locally and in CI.<\/p>\n<p>Most importantly, this architecture ensures that even if a malicious PR successfully manipulates the agent through prompt injection, the damage is contained: the agent cannot access secrets, cannot modify code, and cannot communicate with external attackers.<\/p>\n<h3 class=\"wp-block-heading\">CI integration and GitHub Checks<\/h3>\n<p>The <a href=\"https:\/\/github.com\/docker\/mcp-registry\/blob\/main\/.github\/workflows\/security-review-changes.yaml\" rel=\"nofollow noopener\" target=\"_blank\">review workflow<\/a> is automatically <a href=\"https:\/\/github.com\/docker\/mcp-registry\/blob\/main\/.github\/workflows\/security-review-trigger.yaml\" rel=\"nofollow noopener\" target=\"_blank\">triggered<\/a> when a PR is opened or updated. We still maintain some control over these workflows for external PRs, requiring manual triggering to prevent malicious PRs from exhausting inference API credits. These reviews surface directly as <a href=\"https:\/\/docs.github.com\/en\/pull-requests\/collaborating-with-pull-requests\/collaborating-on-repositories-with-code-quality-features\/about-status-checks\" rel=\"nofollow noopener\" target=\"_blank\">GitHub Status Checks<\/a>, with each server being reviewed receiving dedicated status checks for any analyses performed.<\/p>\n<p>The resulting check status maps to the associated risk level determined by the agent: critical findings result in a failed check that blocks merging, high and medium findings produce neutral warnings, while low and info findings pass. We\u2019re still tuning these criteria (since we\u2019ve asked the agents to be extra pedantic) and currently reviewing the reports manually, but eventually we\u2019ll have the heuristics tuned to a point where we can auto-approve and merge most updated PRs. In the meantime, these reports serve as a scalable \u201ccanary in the coal mine\u201d, alerting Docker MCP Registry maintainers to incoming upstream risks \u2014 both malicious and accidental.<\/p>\n<p>It\u2019s worth noting that the agent code in the MCP Registry repository is just an example (but a functional one available under an MIT License). The actual security review agent that we run lives in a private repository with additional isolation, but it follows the same architecture.<\/p>\n<h3 class=\"wp-block-heading\">Reports and risk labels<\/h3>\n<p>Here\u2019s <a href=\"https:\/\/github.com\/docker\/mcp-registry\/runs\/54408702982\" rel=\"nofollow noopener\" target=\"_blank\">an example<\/a> of a report our automated reviewers produced:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\">\n# Security Review Report\n\n## Scope Summary\n- **Review Mode:** Differential\n- **Repository:** \/workspace\/input\/repository (stripe)\n- **Head Commit:** 4eb0089a690cb60c7a30c159bd879ce5c04dd2b8\n- **Base Commit:** f495421c400748b65a05751806cb20293c764233\n- **Commit Range:** f495421c400748b65a05751806cb20293c764233...4eb0089a690cb60c7a30c159bd879ce5c04dd2b8\n- **Overall Risk Level:** MEDIUM\n\n## Executive Summary\n\nThis differential review covers 23 commits introducing significant changes to the Stripe Agent Toolkit repository, including: folder restructuring (moving tools to a tools\/ directory), removal of evaluation code, addition of new LLM metering and provider packages, security dependency updates, and GitHub Actions workflow permission hardening.\n\n...\n\n<\/pre>\n<\/div>\n<p>The reviewers can produce both <em>differential<\/em> analyses (looking at the changes brought in by a specific set of upstream commits) as well as <em>full<\/em> analyses (looking at entire codebases). We intend to run both differential for PRs and full analyses regularly.<\/p>\n<h3 class=\"wp-block-heading\">Why behavioral analysis matters<\/h3>\n<p>Traditional scanners remain essential, but they tend to focus on things like dependencies with CVEs, syntactical errors (such as a missing <strong>break<\/strong> in a <strong>switch<\/strong> statement), or memory safety issues (such as dereferencing an uninitialized pointer) \u2014 MCP requires us to also examine code\u2019s <em>behavior<\/em>. Consider the <a href=\"https:\/\/postmarkapp.com\/blog\/information-regarding-malicious-postmark-mcp-package\" rel=\"nofollow noopener\" target=\"_blank\">recent malicious <strong>postmark-mcp<\/strong> package impersonation<\/a>: a one\u2011line backdoor quietly BCC\u2019d outgoing emails to an attacker. Events like this reinforce why our registry couples provenance with behavior\u2011aware reviews before updates ship.<\/p>\n<h3 class=\"wp-block-heading\">Real-world results<\/h3>\n<p>In our scans so far, we\u2019ve already found several real-world issues in upstream projects (stay tuned for a follow-up blog post), both in MCP servers and with a similar agent in our <a href=\"https:\/\/www.docker.com\/products\/hardened-images\/\">Docker Hardened Images<\/a> pipeline. We\u2019re happy to say that we haven\u2019t run across anything malicious so far, just logic errors with security implications, but the granularity and subtlety of issues that these agents can identify is impressive.<\/p>\n<h2 class=\"wp-block-heading\">Trust levels in the Docker MCP Catalog<\/h2>\n<p>In addition to the aforementioned technical changes, we\u2019ve also introduced publisher trust levels in the Docker MCP Catalog, exposing them in both the <a href=\"https:\/\/docs.docker.com\/ai\/mcp-catalog-and-toolkit\/toolkit\/\" rel=\"nofollow noopener\" target=\"_blank\">Docker MCP Toolkit<\/a> in Docker Desktop and on <a href=\"https:\/\/hub.docker.com\/mcp\" rel=\"nofollow noopener\" target=\"_blank\">Docker MCP Hub<\/a>. Each server will now have an associated icon indicating whether the server is from a \u201cknown publisher\u201d or maintained by the community. In both cases, we\u2019ll still subject the code to review, but these indicators should provide additional context on the origin of the MCP server.<\/p>\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=1958986590  fetchpriority=\"high\" decoding=\"async\" width=\"1000\" height=\"567\" src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/12\/MCP-Trust-1.png\" class=\"fade-in attachment-full size-full\" alt=\"MCP Trust 1\" title=\"- MCP Trust 1\" \/>\n    <\/div>\n<p class=\"has-xs-font-size\">Figure 1: Here\u2019s an example of an MCP server, the AWS Terraform MCP published by a known, trusted publisher<\/p>\n\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=1535241836  fetchpriority=\"high\" decoding=\"async\" width=\"1000\" height=\"574\" src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/12\/MCP-Trust-2.png\" class=\"fade-in attachment-full size-full\" alt=\"MCP Trust 2\" title=\"- MCP Trust 2\" \/>\n    <\/div>\n<p class=\"has-xs-font-size\">Figure 2: The Fetch MCP server, an example of an MCP community server<\/p>\n<h2 class=\"wp-block-heading\">What does this mean for the community?<\/h2>\n<p>Publishers now benefit from a steady stream of upstream improvements, backed by a documented, auditable trail of code changes. <strong>Commit pins<\/strong> make each release precisely attributable, while the nightly updater keeps the catalog current with no extra effort from publishers or maintainers. <strong>AI-powered reviewers<\/strong> scale our vigilance, freeing up human reviewers to focus on the edge cases that matter most.<\/p>\n<p>At the same time, developers using MCP servers get clarity about a server\u2019s publisher, making it easier to distinguish between official, community, and third-party contributions. These enhancements strengthen trust and security for everyone contributing to or relying on MCP servers in the Docker ecosystem.<\/p>\n<p>Submit your MCP servers to Docker by following the submission guidance <a href=\"https:\/\/github.com\/docker\/mcp-registry\/blob\/main\/CONTRIBUTING.md\" rel=\"nofollow noopener\" target=\"_blank\">here<\/a>!<\/p>\n<h3 class=\"wp-block-heading\">Learn more<\/h3>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/hub.docker.com\/mcp\" rel=\"nofollow noopener\" target=\"_blank\">Explore the MCP Catalog<\/a>: Discover containerized, security-hardened MCP servers.<\/li>\n<li><a href=\"https:\/\/hub.docker.com\/open-desktop?url=https:\/\/open.docker.com\/dashboard\/mcp\" rel=\"nofollow noopener\" target=\"_blank\">Get started with the MCP Toolkit<\/a>: Run MCP servers easily and securely.<\/li>\n<li>Find documentation for <a href=\"https:\/\/docs.docker.com\/ai\/mcp-catalog-and-toolkit\/\" rel=\"nofollow noopener\" target=\"_blank\">Docker MCP Catalog and Toolkit<\/a>.<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Trust is the most important consideration when you connect AI assistants to real tools. While MCP containerization provides strong isolation [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2972,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[4],"tags":[],"class_list":["post-2971","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/2971","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=2971"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/2971\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media\/2972"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=2971"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=2971"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=2971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}