Delivered-To: tjphuhs@gmail.com
Received: by 2002:a05:622a:2b4e:b0:50f:b801:ff26 with SMTP id hb14csp1895849qtb;
        Mon, 11 May 2026 08:43:11 -0700 (PDT)
X-Received: by 2002:a05:620a:17a4:b0:8ea:aa10:7b3f with SMTP id af79cd13be357-9090dfffcecmr1480787885a.1.1778514190755;
        Mon, 11 May 2026 08:43:10 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1778514190; cv=none;
        d=google.com; s=arc-20240605;
        b=Gw2qDZiXSX+dSs9RC2MfThaijNFOCyFWWwVwNivMrmdL1lVupE87FO26dNyrGIUNvW
         fKcdX9jhImED7OjIUqhzN2SrKKlIzIlPKuMOpqA/jezZDqYnIeG2gYCPTWOHW6JZKGOy
         3Y3ga829XTrS3oc1tGe7N2NBjJ4DtsOnBlKyPMk0QOJwRNeOfa/+OOQgcd3yD/h9xBa3
         DWGa1BR6BHBFvYx8YCHbVKuC4apGYq0MvKqJ/+d5wduYFkYEZ/Wfrvy6AeI39BPv4H7e
         wBXcGBxnZRpakRbaW2bkHJahyH39JmSZ+SC5WjGJSftr537E9EVTZuZBRL7sybgMe8pK
         qsrg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605;
        h=list-unsubscribe-post:list-unsubscribe:list-post:list-id
         :list-archive:list-url:list-owner:reply-to:in-reply-to:references
         :sender:feedback-id:date:message-id:to:from:subject:mime-version
         :dkim-signature:dkim-signature;
        bh=SrK9E/5cftiEHqvsDnHSAqkamnRy4tz3ilPf2F8m5ew=;
        fh=9zP21OW67FFZD2VV42mGudo540Qp4aalMWxJB5kMYug=;
        b=RFiz7E4B/kt8CWrntdCs/eCeWCbd3JlgqxEK4u0cExhtbBitdgdL6sCO+5S9MWeiIB
         tu1pUbzDst1ar1KCLPsl0sr0y0PCZum3nTUT+nKk4UkxVjA/GrrF717ueDm4BsUcCATe
         Jwzbg/R/n1ZMYzY34/Bmf8zZlMqYgg/9bA9Wc8Ylwm+bicRBNSsKZdtAz9zDpzO9PvoP
         BWJtfOlOzZZCTeBKlVWYLSjgwzgIejpAoyte2BPggKtZ93zF6H28JNY1ilLyI1uvUUy+
         BPudLLu5Eq/vrCEaFfIpaqbZNCd7zG/2Yy58ItT5CdpQCqZhBlhg3Sc+WR2+XqAx4GBJ
         W13w==;
        dara=google.com
ARC-Authentication-Results: i=1; mx.google.com;
       dkim=pass header.i=@mg-d0.substack.com header.s=mailo header.b=mFhwI5LV;
       dkim=pass header.i=@mailgun.org header.s=mg header.b=WzDsfgi8;
       spf=pass (google.com: domain of bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com designates 159.112.244.43 as permitted sender) smtp.mailfrom="bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com";
       dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=substack.com
Return-Path: <bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com>
Received: from v543.v5375b7fa.use4.send.mailgun.net (v543.v5375b7fa.use4.send.mailgun.net. [159.112.244.43])
        by mx.google.com with UTF8SMTPS id af79cd13be357-9067d25ec65si1376746385a.235.2026.05.11.08.43.10
        for <tjphuhs@gmail.com>
        (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
        Mon, 11 May 2026 08:43:10 -0700 (PDT)
Received-SPF: pass (google.com: domain of bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com designates 159.112.244.43 as permitted sender) client-ip=159.112.244.43;
Authentication-Results: mx.google.com;
       dkim=pass header.i=@mg-d0.substack.com header.s=mailo header.b=mFhwI5LV;
       dkim=pass header.i=@mailgun.org header.s=mg header.b=WzDsfgi8;
       spf=pass (google.com: domain of bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com designates 159.112.244.43 as permitted sender) smtp.mailfrom="bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com";
       dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=substack.com
DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg-d0.substack.com; q=dns/txt; s=mailo; t=1778514190; x=1778521390;
 h=List-Unsubscribe-Post: List-Unsubscribe: List-Post: List-Id: List-Archive: List-Owner: Reply-To: In-Reply-To: References: Sender: Sender: Date: Message-Id: To: To: From: From: Subject: Subject: Content-Type: Mime-Version: X-Feedback-Id;
 bh=SrK9E/5cftiEHqvsDnHSAqkamnRy4tz3ilPf2F8m5ew=;
 b=mFhwI5LVwfhuKu9HFnqMvzzWzP2Y+dFpmwe1waPl2sGklAFMxzLRvL9AEl7fJveWBKZ7WsA0ceMsdDcXHqxsRGhWgHZKUAdwbXOG7INNscu+7MwF2sF9ZS/L4N45+jmpHGa8fiI+DBTEISkif+OoVgjJIoaeP8cvjRq4uKEc4GY=
DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mailgun.org; q=dns/txt; s=mg; t=1778514190; x=1778521390;
 h=List-Unsubscribe-Post: List-Unsubscribe: List-Post: List-Id: List-Archive: List-Owner: Reply-To: In-Reply-To: References: Sender: Sender: Date: Message-Id: To: To: From: From: Subject: Subject: Content-Type: Mime-Version: X-Feedback-Id;
 bh=SrK9E/5cftiEHqvsDnHSAqkamnRy4tz3ilPf2F8m5ew=;
 b=WzDsfgi84MUHpjUdfnvnPWVWdxKsaF4tL1Uig740YlQBtwrRMXpUlHDWHlMsl9MyaLqjfN1mQInpmo8Z89VC/YxfHdZS8/aNjy4szC17f8ZfNKEAG+FY+FZoIc8TdQYC2X3oGv/lCo7IXiPx8TvLVbHDvpP3gB38aoIUattnHCY=
X-Mailgun-Sid: WyJkZWU4NyIsInRqcGh1aHNAZ21haWwuY29tIiwiNjNhZjVkIl0=
X-Feedback-Id: postmaster@mg-d0.substack.com:post:6148c7d8a45790427cda307f:mailgun
Received: by 507199e57faecaea2a709abd6899c911d4f6bcbbd935b46fabfc26cd28db7734 with HTTP
 id 6a01f90e759e38c33701ba63; Mon, 11 May 2026 15:43:10 GMT
X-Mailgun-Sending-Ip: 159.112.244.43
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="2fa2c826e187cd8406eadf45e5d0a540ddf45ce63ed0ce7467f1c130a6ae"
Subject: How Pinterest Built a Production MCP Ecosystem
From: ByteByteGo <bytebytego@substack.com>
To: tjphuhs@gmail.com
X-Mailgun-Tag: post
X-Mailgun-Track-Clicks: false
Message-Id: <20260511153117.3.80c4bb1e2aec6be1@mg-d0.substack.com>
Date: Mon, 11 May 2026 15:31:17 +0000
Feedback-Id: post-196933670:cat-post:pub-817132:substack
Sender: ByteByteGo <bytebytego@substack.com>
References: <post-196933670@substack.com>
In-Reply-To: <post-196933670@substack.com>
Reply-To: ByteByteGo
 <reply+398yzq&4iwoe6&&0866e39060aefc6db1b96d9326c7facf29115d2ee0801376526a4ce491067d4c@mg1.substack.com>
List-Owner: <mailto:bytebytego@substack.com>
List-Url: <https://blog.bytebytego.com/>
List-Archive: <https://blog.bytebytego.com/archive>
List-Id: <bytebytego.substack.com>
List-Post: <https://blog.bytebytego.com/p/how-pinterest-built-a-production>
List-Unsubscribe: <https://blog.bytebytego.com/action/disable_email/disable?token=eyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5NjkzMzY3MCwiaWF0IjoxNzc4NTE0MTkwLCJleHAiOjE4MTAwNTAxOTAsImlzcyI6InB1Yi04MTcxMzIiLCJzdWIiOiJkaXNhYmxlX2VtYWlsIn0.5Fq0VQmVHbpnlU9hEBHp_ljnz6nRzv73SSvKs7pjw8E&all_sections=true>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
X-Mailgun-Variables: {"category": "post", "email_generated_at": "1778514190487", "is_freemail":
 "true", "post_audience": "everyone", "post_id": "196933670", "post_type":
 "newsletter", "pub_community_enabled": "true", "publication_id": "817132",
 "subdomain": "bytebytego", "user_id": "273622398"}

--2fa2c826e187cd8406eadf45e5d0a540ddf45ce63ed0ce7467f1c130a6ae
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

View this post on the web at https://blog.bytebytego.com/p/how-pinterest-bu=
ilt-a-production

Agents need context. Ship the integrations that give it to them. (Sponsored=
) [ https://substack.com/redirect/87dc365a-cf87-4640-8889-81a07e071928?j=3D=
eyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs ]
The context that actually matters isn't in your database. It's in the tools=
 your users live in every day. Multi-stage agents stall the moment they hit=
 a step they can't see. And every missing integration is a different OAuth =
flow, a different token lifecycle, weeks of plumbing before the agent reads=
 a single record.
WorkOS Pipes [ https://substack.com/redirect/5919ff9f-bb8d-4af3-9e59-697f2c=
6d3026?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs =
] connects your agent to the tools your users live in. Pre-built connectors=
 for GitHub, Slack, Salesforce, Google Drive, and more. Pipes handles OAuth=
, token refresh, and credential storage. You call the real provider API wit=
h a fresh token, every time. Your agent pulls context at every step, for as=
 long as the task runs.
Engineers at Pinterest work across a sprawling set of internal systems ever=
y day. They query data through Presto, debug batch jobs in Spark, manage wo=
rkflows in Airflow, search internal documentation, and track bugs in ticket=
ing platforms.
When Pinterest started building AI agents, they wanted those agents to do m=
ore than answer questions. They wanted agents that could reach into these s=
ystems directly, pulling logs, investigating bug tickets, querying database=
s, and proposing fixes, all within the surfaces engineers already use.
The challenge was driven by standard maths. If you have five AI-powered sur=
faces (an internal chat app, IDE plugins, chatbots, CLI agents, and other a=
utonomous agents) and ten internal tools, you=E2=80=99d need fifty bespoke =
integrations without a shared protocol. In other words, every new surface o=
r tool multiplies the work.
The Model Context Protocol (MCP) promised to collapse that multiplication i=
nto addition. Build one MCP client per surface and one MCP server per tool,=
 and they all speak the same language.
Pinterest adopted MCP as the foundation for this vision. However, implement=
ing the protocol turned out to be the easy part. The real engineering effor=
t went into everything around it, such as a central registry, a two-layer a=
uth system, a unified deployment pipeline, and observability baked in from =
day one.
In this article, we look at how Pinterest designed that ecosystem and what =
they had to get right beyond the protocol itself.
Disclaimer: This post is based on publicly shared details from the Pinteres=
t Engineering Team. Please comment if you notice any inaccuracies.
What is MCP
Model Context Protocol (MCP) is an open-source standard that gives large la=
nguage models a unified way to talk to external tools and data sources.
Instead of writing custom glue code between every AI application and every =
tool it needs to access, MCP defines a shared client-server protocol. An AI=
 surface acts as the client, an MCP server wraps a tool or data source, and=
 they communicate using a standardized format for discovering tools, invoki=
ng them, and returning structured results.
Before MCP, connecting AI surfaces to internal tools was an N x M problem. =
Five surfaces times ten tools equals fifty custom integrations to build and=
 maintain. MCP turns that into an N+M problem. You build five clients and t=
en servers, and any client can talk to any server. That is fifteen pieces o=
f work instead of fifty, and the gap widens as you add more surfaces or too=
ls.
But MCP only defines the communication protocol. It does not handle authent=
ication, authorization, deployment, service discovery, or governance.
Those are the problems Pinterest had to solve on its own. In other words, t=
he MCP spec provides the grammar, and Pinterest had to build the entire sch=
ool system around it.
Pinterest=E2=80=99s Three Architectural Bets
When Pinterest decided to adopt MCP, three early decisions shaped the entir=
e ecosystem. Each involved a genuine tradeoff, and understanding those trad=
eoffs helps us make sense of why the architecture looks the way it does.
See the diagram below that shows the overall architecture:
Bet 1: Cloud-hosted servers, not local ones.
MCP supports local servers that run on a developer=E2=80=99s laptop and com=
municate over standard input/output. Many individual developers use MCP thi=
s way with tools like Claude or Cursor.
Pinterest went the opposite direction.
They explicitly optimized for internal cloud-hosted MCP servers, where thei=
r routing and security infrastructure could be applied consistently. Local =
servers are still allowed for experimentation, but the so-called paved path=
 at Pinterest is to write a server, deploy it to their cloud compute enviro=
nment, and register it in their central catalog. Every tool call becomes a =
network request, which adds latency compared to a local server.
However, centralizing servers in the cloud meant that Pinterest could apply=
 consistent authentication, authorization, logging, and monitoring across e=
very server without relying on individual developers to configure those thi=
ngs correctly on their own machines.
Bet 2: Many small servers, not one giant one
Pinterest debated building a single monolithic MCP server that exposed ever=
y tool versus building multiple domain-specific servers. They chose the lat=
ter.
For example, the Presto MCP server handles data queries. The Spark MCP serv=
er handles job debugging. The Knowledge MCP server handles documentation an=
d institutional Q&A. Each server owns a small, coherent set of tools.
Two forces drove this decision.
First, different servers need different access controls. The Presto server =
touches sensitive business data and requires strict group-based gating. A d=
ocumentation server is lower risk and can be more broadly accessible. Bundl=
ing them into one server would force a single access policy across tools wi=
th very different sensitivity levels.
Second, every tool description consumes tokens in the AI model=E2=80=99s co=
ntext window, which is the limited amount of text the model can process in =
a single interaction. A monolithic server with fifty tools would stuff the =
model=E2=80=99s prompt with tool descriptions it does not need for the curr=
ent task, crowding out space for the actual conversation.
Domain-specific servers keep the tool list small and relevant. This context=
 window constraint is uniquely AI-specific because in a traditional microse=
rvices setup, you would not worry about your service catalog consuming toke=
ns.
The tradeoff here is more operational overhead per server, since each one n=
eeds deployment, monitoring, and ownership. This cost led directly to the t=
hird bet.
Bet 3: A unified deployment pipeline
Early feedback from teams was clear. Spinning up a new MCP server required =
too much boilerplate, including deployment pipelines, service configuration=
, and operational setup, all before anyone could write a single line of bus=
iness logic.
The Pinterest engineering team responded by building a unified deployment p=
ipeline. Teams define their tools, and the platform handles deployment, sca=
ling, and infrastructure. This turned what had been a multi-day setup proce=
ss into something where domain experts could focus entirely on their busine=
ss logic. Without this investment, the bet around many small servers would =
have collapsed under its own operational weight.
Sitting beneath all of this is the MCP registry, a central catalog that ser=
ves as the source of truth for which servers exist, who owns them, and how =
to connect to them. It has two faces.
A web UI lets humans browse available servers, see their live status, find =
the owning team and support channels, and inspect visible tools.
An API lets AI clients programmatically discover servers, validate them, an=
d check whether a given user is authorized to access a given server.
Only servers registered here count as approved for production use. In other=
 words, the registry is not just a phone book, but the governance backbone =
of the entire ecosystem.
Two Layers of Auth
Giving AI agents access to tools that touch real production systems and sen=
sitive data raises immediate security concerns.
Pinterest treated MCP as a joint project with their security team from day =
one, and the result is a two-layer authorization model that deserves carefu=
l attention.
See the diagram below:
Consider what happens when an engineer opens Pinterest=E2=80=99s internal A=
I chat and asks the agent to query revenue data from the data warehouse. Th=
at single request crosses multiple systems as mentioned below:
The chat frontend talks to the MCP registry to find available servers.
The request gets routed to the Presto MCP server, which runs a query agains=
t a real database containing business-sensitive information.
At every hop, the system needs to answer two questions. Who is this person?=
 And are they allowed to do this specific thing?
Layer 1 handles coarse-grained checks at the network edge.
When an engineer opens any AI surface at Pinterest, they go through an OAut=
h flow, which is the standard process for logging in with a company account=
 and granting the application permission to act on the user=E2=80=99s behal=
f. This produces a JWT (JSON Web Token), a small signed token that encodes =
the user=E2=80=99s identity and group memberships. That JWT travels with ev=
ery subsequent request.
Before a request reaches any MCP server, it passes through Envoy, a network=
 proxy that sits in front of every service in Pinterest=E2=80=99s infrastru=
cture. Envoy validates the JWT by checking the signature and expiration, th=
en converts it into standard headers like X-Forwarded-User and X-Forwarded-=
Groups.
Envoy also enforces coarse-grained access policies. These are broad rules l=
ike =E2=80=9Cthe production AI chat application may talk to the Presto MCP =
server, but experimental servers running in the dev namespace are off-limit=
s.=E2=80=9D If the request violates these rules, it gets rejected before th=
e MCP server ever sees it. Think of Envoy as the building security desk. It=
 checks your badge and makes sure you are supposed to be in the building at=
 all.
Layer 2 handles fine-grained checks inside each server.
Even if Envoy lets a request through, the MCP server applies a second layer=
 of authorization at the individual tool level. Pinterest uses a decorator =
pattern on tool functions (@authorize_tool(policy=3D=E2=80=99...=E2=80=99))=
 that checks whether the specific user is allowed to invoke that specific t=
ool.
For example, the Presto MCP server might be reachable by many teams, but on=
ly the Ads engineering group can call a tool like get_revenue_metrics. This=
 is like the difference between being allowed into the building and being a=
llowed into a specific room.
For servers that handle particularly sensitive data, Pinterest adds busines=
s-group gating. The server extracts the user=E2=80=99s business group membe=
rship from their JWT and checks it against an approved list before even est=
ablishing a session. This list of approved groups is set during the initial=
 security review when the server is first registered.
For example, even though the Presto MCP server is technically reachable fro=
m Pinterest=E2=80=99s broadly used AI chat interface, only specific groups =
like Ads, Finance, or certain infrastructure teams can actually connect and=
 run queries. This means that turning on a powerful, data-heavy server in a=
 popular surface does not silently expand who can see sensitive data.
Why two layers instead of one?
Envoy=E2=80=99s policies are fast, network-level checks that block obviousl=
y unauthorized traffic before it reaches any application code. The tool-lev=
el decorators handle nuanced, business-logic-specific permissions that a ne=
twork proxy is not equipped to reason about. Together, they provide defense=
 in depth. Even if one layer has a misconfiguration, the other still catche=
s unauthorized access.
The official MCP specification defines an OAuth 2.0 authorization flow wher=
e users authenticate with each MCP server individually, typically involving=
 consent screens and per-server token management. Pinterest skipped this en=
tirely. Since they control the entire internal environment, they piggyback =
on the auth session the user already has when they open an AI surface. Ther=
e is no additional login prompt or consent dialog when a user invokes an MC=
P tool.
This is simpler for end users, but only works because Pinterest owns every =
piece of the stack. A company relying on third-party MCP servers would like=
ly need the per-server OAuth approach described in the spec.
Lastly, for automated service-to-service calls where there is no human in t=
he loop, Pinterest uses SPIFFE-based authentication. In this pattern, the c=
alling service proves its identity through a cryptographic certificate issu=
ed by the service mesh rather than presenting a human=E2=80=99s JWT. Pinter=
est reserves this for low-risk, read-only scenarios where the blast radius =
is tightly constrained.
Meeting Engineers Where They Already Work
Pinterest was deliberate about one thing. MCP could not be a science projec=
t that lived in its own separate interface. It had to show up in the tools =
that engineers already use every day.
The diagram below shows how the MCP integration has been done across variou=
s surfaces at Pinterest.
Pinterest=E2=80=99s internal AI chat interface is used by the majority of e=
mployees daily. The frontend automatically handles OAuth flows and returns =
a list of usable MCP tools scoped to the current user=E2=80=99s permissions=
=2E Once connected, the AI agent binds=20=
MCP tools directly into its toolset, s=
o invoking an MCP tool feels identical to calling any other built-in capabi=
lity. From the user=E2=80=99s perspective, they are just asking the AI to d=
o something, and the MCP plumbing is invisible.
Pinterest also embeds AI bots in its internal communication platform, and t=
hese bots expose MCP tools as well. Auth is handled through the registry AP=
I, just like the web interface. These bots support context-aware tool scopi=
ng, meaning certain MCP tools are restricted to certain channels. Spark MCP=
 tools, for example, only appear in Airflow support channels. This keeps to=
ol lists relevant to the conversation and prevents users from accidentally =
invoking tools that do not make sense in a given context.
AI-enabled IDEs can pull data through the Presto MCP server on demand, so a=
gents bring data directly into coding workflows instead of requiring engine=
ers to switch to a separate dashboard. CLI agents provide similar capabilit=
ies for terminal-based workflows.
The servers that see the heaviest usage reflect the most common engineering=
 pain points.
The Presto MCP server is consistently the highest-traffic server because da=
ta access is a universal need across teams.
The Spark MCP server underpins Pinterest=E2=80=99s AI-assisted debugging ex=
perience, where agents diagnose job failures, summarize logs, and help reco=
rd structured root-cause analyses, turning noisy operational threads into r=
eusable knowledge.
The Knowledge MCP server acts as a general-purpose endpoint for institution=
al knowledge, giving agents the ability to search documentation and answer =
questions across internal sources.
Since MCP servers enable automated actions, the blast radius of a mistake i=
s larger than if a human manually performed the same steps.
Pinterest=E2=80=99s agent guidance mandates human-in-the-loop approval befo=
re any sensitive or expensive action. Agents propose actions, humans approv=
e or reject (optionally in batches) before execution. Pinterest also uses e=
licitation for dangerous operations, where the AI explicitly asks the user =
to confirm before performing something like overwriting data in a table. Th=
is is a governance decision.
Measurements
Pinterest built observability into the MCP ecosystem from the start rather =
than treating it as an afterthought. All MCP servers use a set of shared li=
brary functions that provide logging for inputs and outputs, invocation cou=
nts, exception tracing, and other telemetry out of the box. This is part of=
 the server framework itself, so teams get observability for free when they=
 use the unified deployment pipeline.
At the ecosystem level, Pinterest tracks the number of registered servers a=
nd tools, invocation counts across all servers, and a north-star metric tha=
t rolls everything up into a single number. That number is the time saved. =
For each tool, server owners provide a =E2=80=9Cminutes saved per invocatio=
n=E2=80=9D estimate, based on lightweight user feedback and comparison to t=
he prior manual workflow. Multiplied by invocation counts, this gives an or=
der-of-magnitude view of impact.
As of January 2025, MCP servers at Pinterest were handling 66,000 invocatio=
ns per month across 844 monthly active users. Using the owner-provided esti=
mates, MCP tools were saving on the order of approximately 7,000 hours per =
month.
Conclusion
Pinterest=E2=80=99s MCP ecosystem offers a clear blueprint for organization=
s building AI agents that need to act on internal systems. The pattern they=
 established, a standard protocol, a central registry, layered auth, a unif=
ied deployment pipeline, and built-in observability, is transferable well b=
eyond Pinterest=E2=80=99s specific context.
The most important lesson is where the effort actually went. The MCP protoc=
ol gave Pinterest a shared language between AI surfaces and tools. That was=
 necessary but far from sufficient. The registry, auth layers, deployment p=
ipeline, and measurement framework are what turned a promising protocol int=
o a production system handling tens of thousands of invocations per month.
To conclude, Pinterest=E2=80=99s approach suggests a practical starting poi=
nt of seeding a small set of high-leverage MCP servers that solve real pain=
 points, then invest in the platform work, especially the deployment pipeli=
ne, that makes it easy for other teams to build on top. Pinterest=E2=80=99s=
 unified pipeline was the unlock that turned a platform team project into a=
n org-wide ecosystem.
References:
Building an MCP Ecosystem at Pinterest [ https://substack.com/redirect/e46a=
8d27-0b00-4caf-b9ea-4773ca672cfc?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY=
0krRXGMy3p768BWtuZifRB-Zs ]
Introducing the Model Context Protocol [ https://substack.com/redirect/b910=
3e86-78bb-4524-bf65-6aa0cba6565c?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY=
0krRXGMy3p768BWtuZifRB-Zs ]

Unsubscribe https://substack.com/redirect/2/eyJlIjoiaHR0cHM6Ly9ibG9nLmJ5dGV=
ieXRlZ28uY29tL2FjdGlvbi9kaXNhYmxlX2VtYWlsP3Rva2VuPWV5SjFjMlZ5WDJsa0lqb3lOek=
0yTWpJek9UZ3NJbkJ2YzNSZmFXUWlPakU1Tmprek16WTNNQ3dpYVdGMElqb3hOemM0TlRFME1Ua=
3dMQ0psZUhBaU9qRTRNVEF3TlRBeE9UQXNJbWx6Y3lJNkluQjFZaTA0TVRjeE16SWlMQ0p6ZFdJ=
aU9pSmthWE5oWW14bFgyVnRZV2xzSW4wLjVGcTBWUW1WSGJwbmxVOWhFQkhwX2xqbno2blJ6djc=
zU1N2S3M3cGp3OEUiLCJwIjoxOTY5MzM2NzAsInMiOjgxNzEzMiwiZiI6dHJ1ZSwidSI6MjczNj=
IyMzk4LCJpYXQiOjE3Nzg1MTQxOTAsImV4cCI6MjA5NDA5MDE5MCwiaXNzIjoicHViLTAiLCJzd=
WIiOiJsaW5rLXJlZGlyZWN0In0.22vKqP1CqIoxnNlh92EuhM03JMsqTc9Qo-QlHWveOps?
--2fa2c826e187cd8406eadf45e5d0a540ddf45ce63ed0ce7467f1c130a6ae
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<html lang=3D"en" dir=3D"ltr" style=3D"scrollbar-width: thin;scrollbar-colo=
r: rgb(219,219,219)rgb(255,255,255);"><head><meta charset=3D"utf-8"><title>=
How Pinterest Built a Production MCP Ecosystem</title><style>
@media (max-width: 1024px) {
  .typography .pullquote-align-left,
  .typography.editor .pullquote-align-left,
  .typography .pullquote-align-right,
  .typography.editor .pullquote-align-right,
  .typography .pullquote-align-wide,
  .typography.editor .pullquote-align-wide,
  .typography .pullquote-align-center,
  .typography.editor .pullquote-align-center {
    float: none;
    margin: 0 auto;
    width: 100%;
    max-width: 100%;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .typography .markup table.image-wrapper img,
  .typography.editor .markup table.image-wrapper img,
  .typography .markup table.kindle-wrapper img,
  .typography.editor .markup table.kindle-wrapper img {
    max-width: 550px;
  }
}
@media (min-width: 1024px) {
  .typography:not(:has(#toc)) .captioned-image-container figure:has(> a.ima=
ge2-offset-left),
  .typography.editor:not(:has(#toc)) .captioned-image-container figure:has(=
> a.image2-offset-left) {
    margin-left: var(--image-offset-margin);
  }
  .typography:not(:has(#toc)) .captioned-image-container figure:has(> a.ima=
ge2-offset-right),
  .typography.editor:not(:has(#toc)) .captioned-image-container figure:has(=
> a.image2-offset-right) {
    margin-right: var(--image-offset-margin);
  }
}
@media (min-width: 1300px) {
  .typography .captioned-image-container figure:has(> a.image2-offset-left)=
,
  .typography.editor .captioned-image-container figure:has(> a.image2-offse=
t-left) {
    margin-left: var(--image-offset-margin);
  }
  .typography .captioned-image-container figure:has(> a.image2-offset-right=
),
  .typography.editor .captioned-image-container figure:has(> a.image2-offse=
t-right) {
    margin-right: var(--image-offset-margin);
  }
}
@media (max-width: 1024px) {
  .typography,
  .typography.editor {
    /* Disable offset on mobile/tablet */
  }
  .typography .captioned-image-container figure:has(> a.image2-align-left),
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-left),
  .typography .captioned-image-container figure:has(> a.image2-align-right)=
,
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-right) {
    float: none;
    margin: 1em auto;
    max-width: 100%;
    width: auto;
    padding: 0;
  }
  .typography .captioned-image-container figure:has(> a.image2-align-left.t=
hefp),
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-left.thefp),
  .typography .captioned-image-container figure:has(> a.image2-align-right.=
thefp),
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-right.thefp) {
    margin: 1em auto;
  }
  .typography .captioned-image-container figure:has(> a.image2-offset-left)=
,
  .typography.editor .captioned-image-container figure:has(> a.image2-offse=
t-left),
  .typography .captioned-image-container figure:has(> a.image2-offset-right=
),
  .typography.editor .captioned-image-container figure:has(> a.image2-offse=
t-right) {
    margin: 1em auto;
  }
  .typography .captioned-image-container figure:has(> a.image2-align-left) =
=2Eimage2-inset,
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-left) .image2-inset,
  .typography .captioned-image-container figure:has(> a.image2-align-right)=
 .image2-inset,
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-right) .image2-inset {
    display: block;
    justify-content: initial;
  }
}
@media (max-width: 768px) {
  .typography .markup div.sponsorship-campaign-embed,
  .typography.editor .markup div.sponsorship-campaign-embed {
    margin-top: 24px;
    margin-bottom: 24px;
  }
  .typography .markup div.sponsorship-campaign-embed:first-child,
  .typography.editor .markup div.sponsorship-campaign-embed:first-child {
    margin-top: 0px;
  }
}
@media screen and (max-width: 650px) {
  .typography .markup div.youtube-overlay,
  .typography.editor .markup div.youtube-overlay,
  .typography .markup div.vimeo-overlay,
  .typography.editor .markup div.vimeo-overlay {
    display: none !important;
  }
}
@media screen and (max-width: 370px) {
  .typography .markup div.tiktok-wrap,
  .typography.editor .markup div.tiktok-wrap {
    width: calc(95vw - 32px);
    height: calc((95vw - 32px - 2px) / 0.485714);
  }
}
@media screen and (max-width: 650px) {
  .typography .markup div.embedded-publication-wrap .embedded-publication.s=
how-subscribe,
  .typography.editor .markup div.embedded-publication-wrap .embedded-public=
ation.show-subscribe {
    padding: 24px;
  }
}
@media screen and (max-width: 650px) {
  .typography .markup div.subscription-widget-wrap .subscription-widget.sho=
w-subscribe,
  .typography.editor .markup div.subscription-widget-wrap .subscription-wid=
get.show-subscribe,
  .typography .markup div.subscription-widget-wrap-editor .subscription-wid=
get.show-subscribe,
  .typography.editor .markup div.subscription-widget-wrap-editor .subscript=
ion-widget.show-subscribe,
  .typography .markup div.captioned-button-wrap .subscription-widget.show-s=
ubscribe,
  .typography.editor .markup div.captioned-button-wrap .subscription-widget=
=2Eshow-subscribe {
    padding: 0px 24px;
  }
}
@media screen and (max-width: 650px) {
  .typography .markup div.subscription-widget-wrap .subscription-widget.sho=
w-subscribe .subscription-widget-subscribe .button,
  .typography.editor .markup div.subscription-widget-wrap .subscription-wid=
get.show-subscribe .subscription-widget-subscribe .button,
  .typography .markup div.subscription-widget-wrap-editor .subscription-wid=
get.show-subscribe .subscription-widget-subscribe .button,
  .typography.editor .markup div.subscription-widget-wrap-editor .subscript=
ion-widget.show-subscribe .subscription-widget-subscribe .button,
  .typography .markup div.captioned-button-wrap .subscription-widget.show-s=
ubscribe .subscription-widget-subscribe .button,
  .typography.editor .markup div.captioned-button-wrap .subscription-widget=
=2Eshow-subscribe .subscription-widget-subscribe .button {
    padding: 10px 12px;
    min-width: 110px;
  }
}
@media (max-width: 650px) {
  .typography .markup .twitter-embed,
  .typography.editor .markup .twitter-embed,
  .typography .markup .tweet,
  .typography.editor .markup .tweet {
    padding: 12px;
  }
}
@media (max-width: 650px) {
  .typography .markup .twitter-embed .tweet-text,
  .typography.editor .markup .twitter-embed .tweet-text,
  .typography .markup .tweet .tweet-text,
  .typography.editor .markup .tweet .tweet-text {
    font-size: 14px;
    line-height: 20px;
  }
}
@media (max-width: 650px) {
  .typography .markup .twitter-embed .tweet-photos-container.two,
  .typography.editor .markup .twitter-embed .tweet-photos-container.two,
  .typography .markup .tweet .tweet-photos-container.two,
  .typography.editor .markup .tweet .tweet-photos-container.two,
  .typography .markup .twitter-embed .tweet-photos-container.three,
  .typography.editor .markup .twitter-embed .tweet-photos-container.three,
  .typography .markup .tweet .tweet-photos-container.three,
  .typography.editor .markup .tweet .tweet-photos-container.three,
  .typography .markup .twitter-embed .tweet-photos-container.four,
  .typography.editor .markup .twitter-embed .tweet-photos-container.four,
  .typography .markup .tweet .tweet-photos-container.four,
  .typography.editor .markup .tweet .tweet-photos-container.four {
    height: 200px;
  }
}
@media (max-width: 650px) {
  .typography .markup .twitter-embed a.expanded-link .expanded-link-img,
  .typography.editor .markup .twitter-embed a.expanded-link .expanded-link-=
img,
  .typography .markup .tweet a.expanded-link .expanded-link-img,
  .typography.editor .markup .tweet a.expanded-link .expanded-link-img {
    max-height: 180px;
  }
}
@media (max-width: 650px) {
  .typography .markup .twitter-embed a.expanded-link .expanded-link-descrip=
tion,
  .typography.editor .markup .twitter-embed a.expanded-link .expanded-link-=
description,
  .typography .markup .tweet a.expanded-link .expanded-link-description,
  .typography.editor .markup .tweet a.expanded-link .expanded-link-descript=
ion {
    display: none;
  }
}
@media screen and (max-width: 650px) {
  .typography .markup .apple-podcast-container,
  .typography.editor .markup .apple-podcast-container {
    width: unset;
  }
}
@media (max-width: 420px) {
  .typography .markup .install-substack-app-embed img.install-substack-app-=
embed-img,
  .typography.editor .markup .install-substack-app-embed img.install-substa=
ck-app-embed-img {
    margin: 0 auto 16px auto;
  }
}
@media (max-width: 420px) {
  .typography .markup .install-substack-app-embed .install-substack-app-emb=
ed-text,
  .typography.editor .markup .install-substack-app-embed .install-substack-=
app-embed-text {
    margin: 0 0 12px 0;
    max-width: 100%;
    width: auto;
    text-align: center;
  }
}
@media (max-width: 420px) {
  .typography .markup .install-substack-app-embed .install-substack-app-emb=
ed-link,
  .typography.editor .markup .install-substack-app-embed .install-substack-=
app-embed-link {
    display: flex;
    justify-content: center;
  }
}
@media screen and (min-width: 481px) {
  .share-button-container {
    height: 38px;
  }
}
@media screen and (min-width: 481px) {
  .share-button-container a.comment {
    height: 38px;
    line-height: 38px;
    padding-right: 10px;
  }
}
@media screen and (max-width: 480px) {
  .share-button-container .separator {
    display: block;
    margin: 0;
    height: 8px;
    border-left: none;
  }
}
@media screen and (max-width: 480px) {
  .share-button-container a.share.first img {
    padding-left: 0;
  }
}
@media screen and (min-width: 481px) {
  .share-button-container a.mobile {
    display: none !important;
  }
}
@media screen and (min-width: 541px) {
  .settings-add-pub-modal-wrapper .container .add-recommending-pub-modal-co=
ntainer {
    padding: 36px;
    height: 680px;
  }
}
@media screen and (min-width: 541px) {
  .settings-add-pub-modal-wrapper .container .add-recommending-pub-modal-co=
ntainer .footer {
    position: absolute;
    bottom: 36px;
    margin: 0px;
  }
}
@media screen and (max-width: 650px) {
  .header-anchor-parent {
    display: none;
  }
}
@media screen and (max-width: 768px) {
  .post {
    padding: 16px 0 0 0;
  }
}
@media screen and (max-width: 650px) {
  .post .post-header .post-label {
    margin-top: 8px;
  }
}
@media screen and (max-width: 650px) {
  .post .post-header .meta-author-wrap.alternative-meta .meta-right-column =
=2Epost-meta {
    margin-top: 6px;
  }
}
@media screen and (max-width: 650px) {
  .post .footer-facepile-container {
    height: 64px;
    padding: 0 16px;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    width: 100%;
  }
}
@media screen and (max-width: 650px) {
  .post .post-footer.use-separators {
    justify-content: center;
  }
}
@media screen and (max-width: 650px) {
  .post .post-footer.next-prev {
    height: 64px;
    justify-content: space-between;
    box-sizing: border-box;
  }
}
@media screen and (max-width: 650px) {
  .post-contributor-footer .post-contributor-bio-table {
    display: block;
  }
  .post-contributor-footer .post-contributor-bio-table-row {
    display: flex;
    flex-direction: row;
  }
  .post-contributor-footer .post-contributor-bio-userhead-cell,
  .post-contributor-footer .post-contributor-bio-body-cell {
    display: block;
  }
  .post-contributor-footer .post-contributor-bio-body-cell {
    flex-grow: 1;
  }
  .post-contributor-footer .post-contributor-bio-body-table {
    display: block;
  }
  .post-contributor-footer .post-contributor-bio-body-table-row {
    display: block;
  }
  .post-contributor-footer .post-contributor-bio-copy-cell,
  .post-contributor-footer .post-contributor-bio-controls-cell {
    display: block;
  }
  .post-contributor-footer .post-contributor-bio-copy-cell {
    margin: 0 0 16px 0;
  }
  .post-contributor-footer .post-contributor-bio-controls-cell {
    width: auto;
  }
  .post-contributor-footer .post-contributor-bio-controls {
    margin: auto;
  }
  .post-contributor-footer .post-contributor-bio-controls .button.primary {
    width: 100%;
  }
  .post-contributor-footer .post-contributor-bio-text {
    font-size: 14px;
  }
}
@media screen and (min-width: 768px) {
  .post-silhouette {
    padding: 32px 0;
  }
}
@media screen and (max-width: 650px) {
  .post-silhouette .post-silhouette-title {
    margin-top: 10.44225025px;
    height: 120px;
  }
}
@media screen and (max-width: 650px) {
  .post-silhouette .post-silhouette-meta {
    width: 75%;
  }
}
@media screen and (max-width: 650px) {
  .post-silhouette .post-silhouette-meta.with-byline-image {
    margin: 20px 0;
  }
}
@media screen and (max-width: 650px) {
  .use-theme-bg .post-meta.alternative-meta .post-meta-item,
  .post-meta.alternative-meta .post-meta-item {
    padding-right: 16px;
  }
}
@media screen and (max-width: 370px) {
  .use-theme-bg .post-meta.alternative-meta .post-meta-item,
  .post-meta.alternative-meta .post-meta-item {
    font-size: 14px;
  }
}
@media screen and (max-width: 650px) {
  .use-theme-bg .post-meta.alternative-meta .post-meta-item.guest-author-pu=
blication,
  .post-meta.alternative-meta .post-meta-item.guest-author-publication {
    display: none;
  }
}
@media screen and (max-width: 370px) {
  .post-meta .post-meta-item .post-meta-button {
    height: 36px !important;
    /* important to override in-line height style on emails */
  }
  .post-meta .post-meta-item .post-meta-button .meta-button-label {
    display: none;
  }
  .post-meta .post-meta-item .post-meta-button > svg {
    margin-right: 0;
  }
}
@media screen and (max-width: 370px) {
  .post-meta .post-meta-item {
    font-size: 12px;
  }
}
@media screen and (max-width: 650px) {
  .post .floating-subscribe-button {
    bottom: 20px;
    right: 20px;
  }
}
@media (max-width: 1024px) {
  body .pullquote-align-left,
  body .pullquote-align-right,
  body .pullquote-align-wide,
  body .pullquote-align-center {
    float: none;
    margin: 0 auto;
    width: 100%;
    max-width: 100%;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  body .markup table.image-wrapper img,
  body .markup table.kindle-wrapper img {
    max-width: 550px;
  }
}
@media (min-width: 1024px) {
  body:not(:has(#toc)) .captioned-image-container figure:has(> a.image2-off=
set-left) {
    margin-left: var(--image-offset-margin);
  }
  body:not(:has(#toc)) .captioned-image-container figure:has(> a.image2-off=
set-right) {
    margin-right: var(--image-offset-margin);
  }
}
@media (min-width: 1300px) {
  body .captioned-image-container figure:has(> a.image2-offset-left) {
    margin-left: var(--image-offset-margin);
  }
  body .captioned-image-container figure:has(> a.image2-offset-right) {
    margin-right: var(--image-offset-margin);
  }
}
@media (max-width: 1024px) {
  body {
    /* Disable offset on mobile/tablet */
  }
  body .captioned-image-container figure:has(> a.image2-align-left),
  body .captioned-image-container figure:has(> a.image2-align-right) {
    float: none;
    margin: 1em auto;
    max-width: 100%;
    width: auto;
    padding: 0;
  }
  body .captioned-image-container figure:has(> a.image2-align-left.thefp),
  body .captioned-image-container figure:has(> a.image2-align-right.thefp) =
{
    margin: 1em auto;
  }
  body .captioned-image-container figure:has(> a.image2-offset-left),
  body .captioned-image-container figure:has(> a.image2-offset-right) {
    margin: 1em auto;
  }
  body .captioned-image-container figure:has(> a.image2-align-left) .image2=
-inset,
  body .captioned-image-container figure:has(> a.image2-align-right) .image=
2-inset {
    display: block;
    justify-content: initial;
  }
}
@media (max-width: 768px) {
  body .markup div.sponsorship-campaign-embed {
    margin-top: 24px;
    margin-bottom: 24px;
  }
  body .markup div.sponsorship-campaign-embed:first-child {
    margin-top: 0px;
  }
}
@media screen and (max-width: 650px) {
  body .markup div.youtube-overlay,
  body .markup div.vimeo-overlay {
    display: none !important;
  }
}
@media screen and (max-width: 370px) {
  body .markup div.tiktok-wrap {
    width: calc(95vw - 32px);
    height: calc((95vw - 32px - 2px) / 0.485714);
  }
}
@media screen and (max-width: 650px) {
  body .markup div.embedded-publication-wrap .embedded-publication.show-sub=
scribe {
    padding: 24px;
  }
}
@media screen and (max-width: 650px) {
  body .markup div.subscription-widget-wrap .subscription-widget.show-subsc=
ribe,
  body .markup div.subscription-widget-wrap-editor .subscription-widget.sho=
w-subscribe,
  body .markup div.captioned-button-wrap .subscription-widget.show-subscrib=
e {
    padding: 0px 24px;
  }
}
@media screen and (max-width: 650px) {
  body .markup div.subscription-widget-wrap .subscription-widget.show-subsc=
ribe .subscription-widget-subscribe .button,
  body .markup div.subscription-widget-wrap-editor .subscription-widget.sho=
w-subscribe .subscription-widget-subscribe .button,
  body .markup div.captioned-button-wrap .subscription-widget.show-subscrib=
e .subscription-widget-subscribe .button {
    padding: 10px 12px;
    min-width: 110px;
  }
}
@media (max-width: 650px) {
  body .markup .twitter-embed,
  body .markup .tweet {
    padding: 12px;
  }
}
@media (max-width: 650px) {
  body .markup .twitter-embed .tweet-text,
  body .markup .tweet .tweet-text {
    font-size: 14px;
    line-height: 20px;
  }
}
@media (max-width: 650px) {
  body .markup .twitter-embed .tweet-photos-container.two,
  body .markup .tweet .tweet-photos-container.two,
  body .markup .twitter-embed .tweet-photos-container.three,
  body .markup .tweet .tweet-photos-container.three,
  body .markup .twitter-embed .tweet-photos-container.four,
  body .markup .tweet .tweet-photos-container.four {
    height: 200px;
  }
}
@media (max-width: 650px) {
  body .markup .twitter-embed a.expanded-link .expanded-link-img,
  body .markup .tweet a.expanded-link .expanded-link-img {
    max-height: 180px;
  }
}
@media (max-width: 650px) {
  body .markup .twitter-embed a.expanded-link .expanded-link-description,
  body .markup .tweet a.expanded-link .expanded-link-description {
    display: none;
  }
}
@media screen and (max-width: 650px) {
  body .markup .apple-podcast-container {
    width: unset;
  }
}
@media (max-width: 420px) {
  body .markup .install-substack-app-embed img.install-substack-app-embed-i=
mg {
    margin: 0 auto 16px auto;
  }
}
@media (max-width: 420px) {
  body .markup .install-substack-app-embed .install-substack-app-embed-text=
 {
    margin: 0 0 12px 0;
    max-width: 100%;
    width: auto;
    text-align: center;
  }
}
@media (max-width: 420px) {
  body .markup .install-substack-app-embed .install-substack-app-embed-link=
 {
    display: flex;
    justify-content: center;
  }
}
@media screen and (min-width: 500px) {
  body .header a.logo {
    width: 42px;
    height: 42px;
    border-radius: 12px;
  }
}
@media screen and (max-width: 420px) {
  body .subscription-receipt table:first-of-type .subscription-amount .subs=
cription-discount {
    width: 72px !important;
  }
}
@media screen and (min-width: 481px) {
  body .share-button-container {
    height: auto;
  }
}
@media screen and (max-width: 480px) {
  body .share-button-container .separator {
    display: block !important;
    margin: 0 !important;
    height: 8px !important;
    border-left: none !important;
  }
}
@media screen and (max-width: 650px) {
  .digest .item .post-meta-item.audience {
    display: none;
  }
}
@media screen and (min-width: 500px) {
  .digest-publication .logo img {
    width: 42px;
    height: 42px;
    border-radius: 8px;
  }
}
@media screen and (max-width: 650px) {
  .comments-page .container .comment-list .collapsed-reply {
    margin-left: calc(10 + 32px - 24px);
  }
}
@media screen and (max-width: 650px) {
  .comment > .comment-list {
    padding-left: 24px;
  }
}
@media screen and (max-width: 650px) {
  .finish-magic-login-modal .modal-content .container {
    padding: 24px 0;
  }
}
@media (max-width: 650px) {
  .reader2-text-b3 {
    line-height: 24px;
  }
}
@media screen and (max-width: 650px) {
  .reader2-text-h4 {
    line-height: 24px;
  }
}
@media screen and (min-width: 541px) {
  .user-profile-modal {
    padding-left: 12px;
    padding-right: 12px;
  }
}
@media screen and (max-width: 650px) {
  .subscribe-widget form.form .sideBySideWrap button.rightButton {
    padding: 10px 12px;
  }
}
@media screen and (min-width: 541px) {
  .pub-icon:hover .logo-hover,
  .feed-item-icon:hover .logo-hover {
    display: block;
  }
}
@media screen and (max-width: 650px) {
  .post-ufi.single-full-width-button .post-ufi-button-wrapper {
    width: 100%;
    padding: 16px;
  }
  .post-ufi.single-full-width-button .post-ufi-button-wrapper:empty {
    display: none;
  }
  .post-ufi.single-full-width-button .post-ufi-button {
    width: 100%;
    justify-content: center;
  }
}
@media screen and (max-width: 768px) {
  .file-embed-wrapper {
    padding: 0;
  }
}
@media screen and (max-width: 768px) {
  .file-embed-wrapper-editor {
    padding: 0;
  }
}
@media screen and (max-width: 768px) {
  .file-embed-wrapper-editor:active {
    padding: 0;
  }
}
@media only screen and (max-width: 650px) {
  .file-embed-button.wide,
  .file-embed-error-button.wide {
    display: none;
  }
}
@media only screen and (min-width: 630px) {
  .file-embed-button.narrow,
  .file-embed-error-button.narrow {
    display: none;
  }
}
@media screen and (min-width: 541px) {
  .audio-player-wrapper .audio-player {
    min-width: 500px;
  }
}
@media screen and (max-width: 650px) {
  .audio-player-wrapper .audio-player .audio-player-progress {
    border-left-width: 16px;
    border-right-width: 16px;
  }
}
@media screen and (max-width: 650px) {
  .audio-player-wrapper .audio-player .audio-player-progress .audio-player-=
progress-bar .audio-player-progress-bar-popup {
    top: -54px;
  }
}
@media screen and (max-width: 650px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-progress {
    border-left-width: 16px;
    border-right-width: 16px;
  }
}
@media screen and (max-width: 650px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-progress .audio-p=
layer-progress-bar .audio-player-progress-bar-popup {
    top: -54px;
  }
}
@media (min-width: 250px) {
  .audio-player-wrapper-fancy .audio-player {
    padding: 32px;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group {
    display: flex;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group .button:last-of-type=
 {
    display: block;
  }
}
@media (min-width: 300px) {
  .audio-player-wrapper-fancy .audio-player .btn-group {
    display: block;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group .button:first-of-typ=
e {
    display: block;
  }
}
@media (min-width: 350px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-substack-logo {
    display: block;
  }
  .audio-player-wrapper-fancy .audio-player .audio-player-title {
    margin-top: 16px;
  }
  .audio-player-wrapper-fancy .audio-player .audio-player-hero-image-contai=
ner {
    padding-top: 15%;
    width: 15%;
    display: block;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group .button:first-of-typ=
e {
    display: block;
  }
  .audio-player-wrapper-fancy .audio-player .audio-player-substack-logo {
    display: block;
  }
}
@media (min-width: 350px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-hero-image-contai=
ner {
    padding-top: 25%;
    width: 25%;
    display: block;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group {
    display: flex;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group .button:first-of-typ=
e {
    display: block;
  }
}
@media (min-width: 400px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-hero-image-contai=
ner {
    padding-top: 40%;
    width: 40%;
  }
}
@media (max-width: 400px) {
  .audio-player-wrapper-fancy .audio-player .btn-group {
    margin-top: 12px;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group .button {
    font-size: 13px;
    padding: 6px 12px;
    height: auto;
    margin-top: 10px;
  }
}
@media (min-width: 600px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-hero-image-contai=
ner {
    padding-top: 55%;
    width: 55%;
  }
}
@media (max-width: 650px) {
  .poll-editor-modal {
    min-width: calc(100% - 20px);
  }
}
@media (max-width: 750px) {
  .poll-embed .poll-anchor-target .poll-anchor-copy-button {
    left: 8px;
    top: 45px;
  }
}
@media not all and (min-resolution: 0.001dpcm) {
  @supports (-webkit-appearance: none) {
    p a:not(.primary.button),
    .post p:not(.button-wrapper) a:not(.primary.button),
    .footnote a.footnote-anchor:not(.primary.button),
    .thread-head .markup p:not(.button-wrapper) a:not(.primary.button) {
      color: #7756e3;
      text-decoration: none;
    }
    p a:not(.primary.button):hover,
    .post p:not(.button-wrapper) a:not(.primary.button):hover,
    .footnote a.footnote-anchor:not(.primary.button):hover,
    .thread-head .markup p:not(.button-wrapper) a:not(.primary.button):hove=
r {
      text-decoration: underline;
    }
  }
}</style></head><body class=3D"email-body" style=3D"font-kerning: auto;--im=
age-offset-margin: -120px;"><img src=3D"https://eotrx.substackcdn.com/o/30e=
87036aa674d3c/p.gif?token=3DeyJtIjoiPDIwMjYwNTExMTUzMTE3LjMuODBjNGJiMWUyYWV=
jNmJlMUBtZy1kMC5zdWJzdGFjay5jb20-IiwidSI6MjczNjIyMzk4LCJyIjoidGpwaHVoc0BnbW=
FpbC5jb20iLCJkIjoibWctZDAuc3Vic3RhY2suY29tIiwicCI6MTk2OTMzNjcwLCJ0IjoibmV3c=
2xldHRlciIsImEiOiJldmVyeW9uZSIsInMiOjgxNzEzMiwiYyI6InBvc3QiLCJmIjp0cnVlLCJw=
b3NpdGlvbiI6InRvcCIsImlhdCI6MTc3ODUxNDE5MCwiZXhwIjoxNzgxMTA2MTkwLCJpc3MiOiJ=
wdWItMCIsInN1YiI6ImVvIn0.jWDBVWtTZz_z9Id86Ak8XrPFnIO4sjc8-ClMseKKBm8" alt=
=3D"" width=3D"1" height=3D"1" border=3D"0" style=3D"height:1px !important;=
width:1px !important;border-width:0 !important;margin-top:0 !important;marg=
in-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;p=
adding-top:0 !important;padding-bottom:0 !important;padding-right:0 !import=
ant;padding-left:0 !important;"/><div class=3D"preview" style=3D"display:no=
ne;font-size:1px;color:#333333;line-height:1px;max-height:0px;max-width:0px=
;opacity:0;overflow:hidden;">In this article, we look at how Pinterest desi=
gned that ecosystem and what they had to get right beyond the protocol itse=
lf.</div><div class=3D"preview" style=3D"display:none;font-size:1px;color:#=
333333;line-height:1px;max-height:0px;max-width:0px;opacity:0;overflow:hidd=
en;">&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; =
&#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847=
; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#=
173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &=
#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847;=
 &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#1=
73;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#=
8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; =
&nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#17=
3;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8=
199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &=
nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173=
;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#81=
99; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &n=
bsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;=
&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#819=
9; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nb=
sp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&=
#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199=
; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbs=
p; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#=
847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199;=
 &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp=
; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#8=
47; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; =
&#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp;=
 &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#84=
7; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &=
#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; =
&#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847=
; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#=
173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &=
#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847;=
 &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#1=
73;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#=
8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; =
&nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#17=
3;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8=
199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &=
nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173=
;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#81=
99; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &n=
bsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;=
&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#819=
9; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nb=
sp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&=
#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199=
; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbs=
p; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#=
847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199;=
 &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp=
; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#8=
47; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; =
&#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp;=
 &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#84=
7; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &=
#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; =
&#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847=
; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#=
173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &=
#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847;=
 &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#1=
73;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#=
8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; =
&nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#17=
3;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8=
199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &=
nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173=
;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#81=
99; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &n=
bsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;=
&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#819=
9; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nb=
sp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&=
#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;</div><table class=
=3D"email-body-container" role=3D"presentation" width=3D"100%" border=3D"0"=
 cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td></td><td class=3D"conte=
nt" width=3D"550"></td><td></td></tr><tr><td></td><td class=3D"content" wid=
th=3D"550" align=3D"left"><div style=3D"font-size: 16px;line-height: 26px;m=
ax-width: 550px;width: 100%;margin: 0 auto;overflow-wrap: break-word;"><tab=
le role=3D"presentation" width=3D"100%" border=3D"0" cellspacing=3D"0" cell=
padding=3D"0"><tbody><tr><td align=3D"right" style=3D"height:20px;"><table =
role=3D"presentation" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpad=
ding=3D"0"><tbody><tr><td style=3D"vertical-align:middle;"><span class=3D"p=
encraft pc-reset reset-IxiVJZ tw-font-body tw-text-ssm tw-text-substack-sec=
ondary" style=3D"font-family: SF Pro Text, -apple-system, system-ui, BlinkM=
acSystemFont, Inter, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple =
Color Emoji, Segoe UI Emoji, Segoe UI Symbol;font-size: 13px;color: unset;l=
ist-style: none;text-decoration: unset;margin: 0;"><div class=3D"pencraft p=
c-reset align-right-VJbKw5 size-12-mmZ61m reset-IxiVJZ" style=3D"list-style=
: none;color: unset;text-align: right;font-size: 12px;line-height: 16px;tex=
t-decoration: unset;margin: 0;"><span class=3D"pencraft pc-reset reset-IxiV=
JZ" translated=3D"" style=3D"list-style: none;color: unset;text-decoration:=
 unset;margin: 0;">Forwarded this email? <a class=3D"pencraft pc-reset deco=
ration-underline-ClTkYc reset-IxiVJZ" href=3D"https://substack.com/redirect=
/2/eyJlIjoiaHR0cHM6Ly9ibG9nLmJ5dGVieXRlZ28uY29tL3N1YnNjcmliZT91dG1fc291cmNl=
PWVtYWlsJnV0bV9jYW1wYWlnbj1lbWFpbC1zdWJzY3JpYmUmcj00aXdvZTYmbmV4dD1odHRwcyU=
zQSUyRiUyRmJsb2cuYnl0ZWJ5dGVnby5jb20lMkZwJTJGaG93LXBpbnRlcmVzdC1idWlsdC1hLX=
Byb2R1Y3Rpb24iLCJwIjoxOTY5MzM2NzAsInMiOjgxNzEzMiwiZiI6dHJ1ZSwidSI6MjczNjIyM=
zk4LCJpYXQiOjE3Nzg1MTQxOTAsImV4cCI6MjA5NDA5MDE5MCwiaXNzIjoicHViLTAiLCJzdWIi=
OiJsaW5rLXJlZGlyZWN0In0.ixzQc8IVMfGuNWZ6o4TnedZDxZXcQMenld6N9ARgREU?" style=
=3D"list-style: none;color: unset;text-decoration: unset;margin: 0;-webkit-=
text-decoration-line: underline;text-decoration-line: underline;">Subscribe=
 here</a> for more</span></div></span></td></tr></tbody></table></td></tr><=
/tbody></table><div class=3D"post typography" dir=3D"auto" style=3D"--image=
-offset-margin: -120px;padding: 32px 0 0 0;font-size: 16px;line-height: 26p=
x;"><div class=3D"post-header" role=3D"region" aria-label=3D"Post header" s=
tyle=3D"font-size: 16px;line-height: 26px;"><h1 class=3D"post-title publish=
ed title-X77sOw" dir=3D"auto" style=3D"direction: auto;text-align: start;un=
icode-bidi: isolate;color: rgb(54,55,55);font-family: 'SF Pro Display',-app=
le-system-headline,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Ro=
boto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe=
 UI Symbol';font-weight: bold;-webkit-font-smoothing: antialiased;-moz-osx-=
font-smoothing: antialiased;-webkit-appearance: optimizelegibility;-moz-app=
earance: optimizelegibility;appearance: optimizelegibility;margin: 0;line-h=
eight: 36px;font-size: 32px;"><a href=3D"https://substack.com/app-link/post=
?publication_id=3D817132&post_id=3D196933670&utm_source=3Dpost-email-title&=
utm_campaign=3Demail-post-title&isFreemail=3Dtrue&r=3D4iwoe6&token=3DeyJ1c2=
VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5NjkzMzY3MCwiaWF0IjoxNzc4NTE0MTkwLCJle=
HAiOjE3ODExMDYxOTAsImlzcyI6InB1Yi04MTcxMzIiLCJzdWIiOiJwb3N0LXJlYWN0aW9uIn0.=
G9YPeH91zFlYHXYWap5AQu-ZJDvnjA7znj-ciZ3JhdY" style=3D"color: rgb(54,55,55);=
text-decoration: none;">How Pinterest Built a Production MCP Ecosystem</a><=
/h1><table class=3D"post-meta" role=3D"presentation" width=3D"100%" border=
=3D"0" cellspacing=3D"0" cellpadding=3D"0" style=3D"margin: 1em 0;height: 2=
0px;align-items: center;"><tbody><tr><td><table role=3D"presentation" width=
=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td><=
table role=3D"presentation" width=3D"auto" border=3D"0" cellspacing=3D"0" c=
ellpadding=3D"0"><tbody><tr><td style=3D"vertical-align:middle;"><div class=
=3D"pencraft pc-reset color-primary-zABazT line-height-20-t4M0El font-meta-=
MWBumP size-11-NuY2Zx weight-medium-fw81nC transform-uppercase-yKDgcq reset=
-IxiVJZ meta-EgzBVA custom-css-email-post-author" style=3D"list-style: none=
;font-size: 11px;line-height: 20px;text-decoration: unset;color: rgb(54,55,=
55);margin: 0;font-family: 'SF Compact',-apple-system,system-ui,-apple-syst=
em,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple C=
olor Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight: 500;text-transf=
orm: uppercase;letter-spacing: .2px;"><a class=3D"pencraft pc-reset color-p=
rimary-zABazT line-height-20-t4M0El font-meta-MWBumP size-11-NuY2Zx weight-=
medium-fw81nC transform-uppercase-yKDgcq reset-IxiVJZ meta-EgzBVA" style=3D=
"list-style: none;color: rgb(54,55,55);margin: 0;font-size: 11px;line-heigh=
t: 20px;font-family: 'SF Compact',-apple-system,system-ui,-apple-system,Bli=
nkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color E=
moji','Segoe UI Emoji','Segoe UI Symbol';font-weight: 500;text-transform: u=
ppercase;letter-spacing: .2px;text-decoration: none" href=3D"https://substa=
ck.com/@bytebytego399569">ByteByteGo</a></div></td></tr></tbody></table></t=
d></tr><tr><td><table role=3D"presentation" width=3D"auto" border=3D"0" cel=
lspacing=3D"0" cellpadding=3D"0"><tbody><tr><td style=3D"vertical-align:mid=
dle;"><div class=3D"pencraft pc-reset color-secondary-ls1g8s line-height-20=
-t4M0El font-meta-MWBumP size-11-NuY2Zx weight-medium-fw81nC transform-uppe=
rcase-yKDgcq reset-IxiVJZ meta-EgzBVA" style=3D"list-style: none;font-size:=
 11px;line-height: 20px;text-decoration: unset;color: rgb(119,119,119);marg=
in: 0;font-family: 'SF Compact',-apple-system,system-ui,-apple-system,Blink=
MacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emo=
ji','Segoe UI Emoji','Segoe UI Symbol';font-weight: 500;text-transform: upp=
ercase;letter-spacing: .2px;"><time datetime=3D"2026-05-11T15:31:17.846Z">M=
ay 11</time></div></td></tr></tbody></table></td></tr></tbody></table></td>=
<td align=3D"right"><table role=3D"presentation" width=3D"auto" border=3D"0=
" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td style=3D"vertical-alig=
n:middle;"><a href=3D"https://substack.com/@bytebytego399569"><img class=3D=
"custom-css-email-avatar avatar-QIQ5yR" src=3D"https://substackcdn.com/imag=
e/fetch/$s_!U1Ej!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsub=
stack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9941c68-e5b7-4b93-be=
75-df7cc4ffef02_504x540.png" style=3D"box-sizing: border-box;max-width: 550=
px;border: none;vertical-align: middle;width: 40px;height: 40px;min-width: =
40px;min-height: 40px;object-fit: cover;margin: 0px;display: inline;border-=
radius: 50%" width=3D"40" height=3D"40"></a></td></tr></tbody></table></td>=
</tr></tbody></table><table class=3D"email-ufi-2-top" role=3D"presentation"=
 width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" style=3D"b=
order-top: 1px solid rgb(0,0,0,.1);border-bottom: 1px solid rgb(0,0,0,.1);m=
in-width: 100%;"><tbody><tr height=3D"16"><td height=3D"16" style=3D"font-s=
ize:0px;line-height:0;">&nbsp;</td></tr><tr><td><table role=3D"presentation=
" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><t=
r><td><table role=3D"presentation" width=3D"auto" border=3D"0" cellspacing=
=3D"0" cellpadding=3D"0"><tbody><tr><td style=3D"vertical-align:middle;"><t=
able role=3D"presentation" width=3D"38" border=3D"0" cellspacing=3D"0" cell=
padding=3D"0"><tbody><tr><td align=3D"center"><a class=3D"email-icon-button=
" href=3D"https://substack.com/app-link/post?publication_id=3D817132&post_i=
d=3D196933670&utm_source=3Dsubstack&isFreemail=3Dtrue&submitLike=3Dtrue&tok=
en=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5NjkzMzY3MCwicmVhY3Rpb24iOi=
LinaQiLCJpYXQiOjE3Nzg1MTQxOTAsImV4cCI6MTc4MTEwNjE5MCwiaXNzIjoicHViLTgxNzEzM=
iIsInN1YiI6InJlYWN0aW9uIn0.1zbCjr0oW7aKThyT1BLNAB6LHOXkvNjSOUYgJAljw_o&utm_=
medium=3Demail&utm_campaign=3Demail-reaction&r=3D4iwoe6" style=3D"font-fami=
ly: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,=
Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';dis=
play: inline-block;font-weight: 500;border: 1px solid rgb(0,0,0,.1);border-=
radius: 9999px;text-transform: uppercase;font-size: 12px;line-height: 1;pad=
ding: 9px 0;text-decoration: none;color: rgb(119,119,119);min-width: 38px;b=
ox-sizing: border-box;width: 38px"><img class=3D"icon" src=3D"https://subst=
ackcdn.com/image/fetch/$s_!PeVs!,w_36,c_scale,f_png,q_auto:good,fl_progress=
ive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucideHeart%3Fv%3D4%26height%=
3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D"18" h=
eight=3D"18" style=3D"border: none;vertical-align: middle;max-width: 18px" =
alt=3D""></a></td></tr></tbody></table></td><td width=3D"8" style=3D"min-wi=
dth:8px;"></td><td style=3D"vertical-align:middle;"><table role=3D"presenta=
tion" width=3D"38" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody>=
<tr><td align=3D"center"><a class=3D"email-icon-button" href=3D"https://sub=
stack.com/app-link/post?publication_id=3D817132&post_id=3D196933670&utm_sou=
rce=3Dsubstack&utm_medium=3Demail&isFreemail=3Dtrue&comments=3Dtrue&token=
=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5NjkzMzY3MCwiaWF0IjoxNzc4NTE0=
MTkwLCJleHAiOjE3ODExMDYxOTAsImlzcyI6InB1Yi04MTcxMzIiLCJzdWIiOiJwb3N0LXJlYWN=
0aW9uIn0.G9YPeH91zFlYHXYWap5AQu-ZJDvnjA7znj-ciZ3JhdY&r=3D4iwoe6&utm_campaig=
n=3Demail-half-magic-comments&action=3Dpost-comment&utm_source=3Dsubstack&u=
tm_medium=3Demail" style=3D"font-family: system-ui,-apple-system,BlinkMacSy=
stemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','=
Segoe UI Emoji','Segoe UI Symbol';display: inline-block;font-weight: 500;bo=
rder: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-transform: upperca=
se;font-size: 12px;line-height: 1;padding: 9px 0;text-decoration: none;colo=
r: rgb(119,119,119);min-width: 38px;box-sizing: border-box;width: 38px"><im=
g class=3D"icon" src=3D"https://substackcdn.com/image/fetch/$s_!x1tS!,w_36,=
c_scale,f_png,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2=
Ficon%2FLucideComments%3Fv%3D4%26height%3D36%26fill%3Dnone%26stroke%3D%2523=
808080%26strokeWidth%3D2" width=3D"18" height=3D"18" style=3D"border: none;=
vertical-align: middle;max-width: 18px" alt=3D""></a></td></tr></tbody></ta=
ble></td><td width=3D"8" style=3D"min-width:8px;"></td><td style=3D"vertica=
l-align:middle;"><table role=3D"presentation" width=3D"38" border=3D"0" cel=
lspacing=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D"center"><a class=
=3D"email-icon-button" href=3D"https://substack.com/app-link/post?publicati=
on_id=3D817132&post_id=3D196933670&utm_source=3Dsubstack&utm_medium=3Demail=
&utm_content=3Dshare&utm_campaign=3Demail-share&action=3Dshare&triggerShare=
=3Dtrue&isFreemail=3Dtrue&r=3D4iwoe6&token=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsIn=
Bvc3RfaWQiOjE5NjkzMzY3MCwiaWF0IjoxNzc4NTE0MTkwLCJleHAiOjE3ODExMDYxOTAsImlzc=
yI6InB1Yi04MTcxMzIiLCJzdWIiOiJwb3N0LXJlYWN0aW9uIn0.G9YPeH91zFlYHXYWap5AQu-Z=
JDvnjA7znj-ciZ3JhdY" style=3D"font-family: system-ui,-apple-system,BlinkMac=
SystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji'=
,'Segoe UI Emoji','Segoe UI Symbol';display: inline-block;font-weight: 500;=
border: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-transform: upper=
case;font-size: 12px;line-height: 1;padding: 9px 0;text-decoration: none;co=
lor: rgb(119,119,119);min-width: 38px;box-sizing: border-box;width: 38px"><=
img class=3D"icon" src=3D"https://substackcdn.com/image/fetch/$s_!_L14!,w_3=
6,c_scale,f_png,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com=
%2Ficon%2FLucideShare2%3Fv%3D4%26height%3D36%26fill%3Dnone%26stroke%3D%2523=
808080%26strokeWidth%3D2" width=3D"18" height=3D"18" style=3D"border: none;=
vertical-align: middle;max-width: 18px" alt=3D""></a></td></tr></tbody></ta=
ble></td><td width=3D"8" style=3D"min-width:8px;"></td><td style=3D"vertica=
l-align:middle;"><table role=3D"presentation" width=3D"38" border=3D"0" cel=
lspacing=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D"center"><a class=
=3D"email-icon-button" href=3D"https://substack.com/redirect/2/eyJlIjoiaHR0=
cHM6Ly9vcGVuLnN1YnN0YWNrLmNvbS9wdWIvYnl0ZWJ5dGVnby9wL2hvdy1waW50ZXJlc3QtYnV=
pbHQtYS1wcm9kdWN0aW9uP3V0bV9zb3VyY2U9c3Vic3RhY2smdXRtX21lZGl1bT1lbWFpbCZ1dG=
1fY2FtcGFpZ249ZW1haWwtcmVzdGFjay1jb21tZW50JmFjdGlvbj1yZXN0YWNrLWNvbW1lbnQmc=
j00aXdvZTYmdG9rZW49ZXlKMWMyVnlYMmxrSWpveU56TTJNakl6T1Rnc0luQnZjM1JmYVdRaU9q=
RTVOamt6TXpZM01Dd2lhV0YwSWpveE56YzROVEUwTVRrd0xDSmxlSEFpT2pFM09ERXhNRFl4T1R=
Bc0ltbHpjeUk2SW5CMVlpMDRNVGN4TXpJaUxDSnpkV0lpT2lKd2IzTjBMWEpsWVdOMGFXOXVJbj=
AuRzlZUGVIOTF6RmxZSFhZV2FwNUFRdS1aSkR2bmpBN3puai1jaVozSmhkWSIsInAiOjE5NjkzM=
zY3MCwicyI6ODE3MTMyLCJmIjp0cnVlLCJ1IjoyNzM2MjIzOTgsImlhdCI6MTc3ODUxNDE5MCwi=
ZXhwIjoyMDk0MDkwMTkwLCJpc3MiOiJwdWItMCIsInN1YiI6ImxpbmstcmVkaXJlY3QifQ.T6or=
2FTUkAZiu_ZybNmxxrpyEpWicD2RhKH49aMv9wQ?&utm_source=3Dsubstack&utm_medium=
=3Demail" style=3D"font-family: system-ui,-apple-system,BlinkMacSystemFont,=
'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI =
Emoji','Segoe UI Symbol';display: inline-block;font-weight: 500;border: 1px=
 solid rgb(0,0,0,.1);border-radius: 9999px;text-transform: uppercase;font-s=
ize: 12px;line-height: 1;padding: 9px 0;text-decoration: none;color: rgb(11=
9,119,119);min-width: 38px;box-sizing: border-box;width: 38px"><img class=
=3D"icon" src=3D"https://substackcdn.com/image/fetch/$s_!ubXF!,w_36,c_scale=
,f_png,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2=
Fnotes__NoteRestackIcon%3Fv%3D4%26height%3D36%26fill%3Dnone%26stroke%3D%252=
3808080%26strokeWidth%3D2%26strokeLinecap%3Dround%26strokeLinejoin%3Dround"=
 width=3D"18" height=3D"18" alt=3D"" style=3D"max-width: 550px;border: none=
 !important;vertical-align: middle;"></a></td></tr></tbody></table></td></t=
r></tbody></table></td><td align=3D"right"><table role=3D"presentation" wid=
th=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td=
 style=3D"vertical-align:middle;"><table role=3D"presentation" width=3D"aut=
o" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D=
"center"><a class=3D"email-button-outline" href=3D"https://open.substack.co=
m/pub/bytebytego/p/how-pinterest-built-a-production?utm_source=3Demail&redi=
rect=3Dapp-store&utm_campaign=3Demail-read-in-app" style=3D"font-family: sy=
stem-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,=
sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';display: =
inline-block;font-weight: 500;border: 1px solid rgb(0,0,0,.1);border-radius=
: 9999px;text-transform: uppercase;font-size: 12px;line-height: 12px;paddin=
g: 9px 14px;text-decoration: none;color: rgb(119,119,119);"><div class=3D"e=
mail-button-spacer" style=3D"font-size: 16px;line-height: 26px;display: inl=
ine-block;vertical-align: middle;max-width: 0;min-height: 18px;"></div><spa=
n class=3D"email-button-text" style=3D"vertical-align: middle;margin-right:=
 4px">READ IN APP</span><img class=3D"icon text-icon" src=3D"https://substa=
ckcdn.com/image/fetch/$s_!ET-_!,w_36,c_scale,f_png,q_auto:good,fl_progressi=
ve:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucideArrowUpRight%3Fv%3D4%26h=
eight%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D=
"18" height=3D"18" style=3D"min-width: 18px;min-height: 18px;border: none;v=
ertical-align: middle;margin-right: 0;margin-left: 0;max-width: 18px" alt=
=3D""></a></td></tr></tbody></table></td></tr></tbody></table></td></tr></t=
body></table></td></tr><tr height=3D"16"><td height=3D"16" style=3D"font-si=
ze:0px;line-height:0;">&nbsp;</td></tr></tbody></table></div></div><div cla=
ss=3D"post typography" dir=3D"auto" style=3D"--image-offset-margin: -120px;=
padding: 32px 0 0 0;font-size: 16px;line-height: 26px;"><div class=3D"body =
markup" dir=3D"auto" style=3D"text-align: initial;font-size: 16px;line-heig=
ht: 26px;width: 100%;word-break: break-word;margin-bottom: 16px;"><h2 class=
=3D"header-anchor-post" style=3D"position: relative;font-family: 'SF Pro Di=
splay',-apple-system-headline,system-ui,-apple-system,BlinkMacSystemFont,'S=
egoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Em=
oji','Segoe UI Symbol';font-weight: bold;-webkit-font-smoothing: antialiase=
d;-moz-osx-font-smoothing: antialiased;-webkit-appearance: optimizelegibili=
ty;-moz-appearance: optimizelegibility;appearance: optimizelegibility;margi=
n: 1em 0 0.625em 0;color: rgb(54,55,55);line-height: 1.16em;font-size: calc=
(1.625em * 1);margin-top: 0;"><a href=3D"https://substack.com/redirect/87dc=
365a-cf87-4640-8889-81a07e071928?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY=
0krRXGMy3p768BWtuZifRB-Zs" style=3D"color: rgb(54,55,55);text-decoration: u=
nderline;">Agents need context. Ship the integrations that give it to them.=
 (Sponsored)</a></h2><div class=3D"captioned-image-container-static" style=
=3D"font-size: 16px;line-height: 26px;margin: 32px auto;"><figure style=3D"=
width: 100%;margin: 0 auto;"><table class=3D"image-wrapper" width=3D"100%" =
border=3D"0" cellspacing=3D"0" cellpadding=3D"0" data-component-name=3D"Ima=
ge2ToDOMStatic" style=3D"mso-padding-alt: 1em 0 1.6em;"><tbody><tr><td styl=
e=3D"text-align: center;"></td><td class=3D"content" align=3D"left" width=
=3D"1200" style=3D"text-align: center;"><a class=3D"image-link" target=3D"_=
blank" href=3D"https://substack.com/redirect/4ec057ca-304d-4515-b9c4-196819=
0521b7?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs"=
 style=3D"position: relative;flex-direction: column;align-items: center;pad=
ding: 0;width: auto;height: auto;border: none;text-decoration: none;display=
: block;margin: 0;"><img class=3D"wide-image" data-attrs=3D"{&quot;src&quot=
;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/208f5b10=
-4166-4384-97ca-0b6979c095e3_1200x620.png&quot;,&quot;srcNoWatermark&quot;:=
null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&qu=
ot;:620,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quo=
t;:143695,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quo=
t;image/png&quot;,&quot;href&quot;:&quot;https://go.bytebytego.com/WorkOS_0=
51126CTA&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&qu=
ot;internalRedirect&quot;:&quot;https://blog.bytebytego.com/i/196933670?img=
=3Dhttps%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2=
08f5b10-4166-4384-97ca-0b6979c095e3_1200x620.png&quot;,&quot;isProcessing&q=
uot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" alt=3D"" width=
=3D"550" height=3D"284.1666666666667" src=3D"https://substackcdn.com/image/=
fetch/$s_!eP8c!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/http=
s%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208f5b10=
-4166-4384-97ca-0b6979c095e3_1200x620.png" style=3D"border: none !important=
;vertical-align: middle;display: block;-ms-interpolation-mode: bicubic;heig=
ht: auto;margin-bottom: 0;width: auto !important;max-width: 100% !important=
;margin: 0 auto;"></a></td><td style=3D"text-align: center;"></td></tr></tb=
ody></table></figure></div><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,=
55);line-height: 26px;font-size: 16px;text-align: justify"><span>The contex=
t that actually matters isn't in your database. It's in the tools your user=
s live in every day. Multi-stage agents stall the moment they hit a step th=
ey can't see. And every missing integration is a different OAuth flow, a di=
fferent token lifecycle, weeks of plumbing before the agent reads a single =
record.</span><br><br><a href=3D"https://substack.com/redirect/5919ff9f-bb8=
d-4af3-9e59-697f2c6d3026?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy=
3p768BWtuZifRB-Zs" style=3D"color: #7756e3;text-decoration: none;">WorkOS P=
ipes</a><span> connects your agent to the tools your users live in. Pre-bui=
lt connectors for GitHub, Slack, Salesforce, Google Drive, and more. Pipes =
handles OAuth, token refresh, and credential storage. You call the real pro=
vider API with a fresh token, every time. Your agent pulls context at every=
 step, for as long as the task runs.</span></p><p class=3D"button-wrapper" =
data-attrs=3D"{&quot;url&quot;:&quot;https://go.bytebytego.com/WorkOS_05112=
6CTA&quot;,&quot;text&quot;:&quot;Give your agent context &#8594;&quot;,&qu=
ot;action&quot;:null,&quot;class&quot;:null}" data-component-name=3D"Button=
CreateButton" style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height:=
 26px;font-size: 16px;text-align: center;cursor: pointer;border-radius: 4px=
;"><a class=3D"button primary" href=3D"https://substack.com/redirect/4ec057=
ca-304d-4515-b9c4-1968190521b7?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0k=
rRXGMy3p768BWtuZifRB-Zs" style=3D"font-family: system-ui,-apple-system,Blin=
kMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Em=
oji','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;box-sizing: b=
order-box;cursor: pointer;border: none;border-radius: 8px;font-size: 14px;l=
ine-height: 20px;font-weight: 600;text-align: center;margin: 0;opacity: 1;o=
utline: none;white-space: nowrap;color: #ffffff !important;text-decoration:=
 none !important;background-color: #7756e3;padding: 12px 20px;height: auto;=
"><span style=3D"color: #ffffff;text-decoration: none;">Give your agent con=
text &#8594;</span></a></p><div style=3D"font-size: 16px;line-height: 26px;=
"><hr style=3D"margin: 32px 0;padding: 0;height: 1px;background: rgb(0,0,0,=
=2E1);border: none;"></div><p style=3D"m=
argin: 0 0 20px 0;color: rgb(54,55,55=
);line-height: 26px;font-size: 16px;text-align: justify">Engineers at Pinte=
rest work across a sprawling set of internal systems every day. They query =
data through Presto, debug batch jobs in Spark, manage workflows in Airflow=
, search internal documentation, and track bugs in ticketing platforms.</p>=
<p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-=
size: 16px;text-align: justify">When Pinterest started building AI agents, =
they wanted those agents to do more than answer questions. They wanted agen=
ts that could reach into these systems directly, pulling logs, investigatin=
g bug tickets, querying databases, and proposing fixes, all within the surf=
aces engineers already use.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54=
,55,55);line-height: 26px;font-size: 16px;text-align: justify">The challeng=
e was driven by standard maths. If you have five AI-powered surfaces (an in=
ternal chat app, IDE plugins, chatbots, CLI agents, and other autonomous ag=
ents) and ten internal tools, you&#8217;d need fifty bespoke integrations w=
ithout a shared protocol. In other words, every new surface or tool multipl=
ies the work.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-h=
eight: 26px;font-size: 16px;text-align: justify">The Model Context Protocol=
 (MCP) promised to collapse that multiplication into addition. Build one MC=
P client per surface and one MCP server per tool, and they all speak the sa=
me language.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-he=
ight: 26px;font-size: 16px;text-align: justify">Pinterest adopted MCP as th=
e foundation for this vision. However, implementing the protocol turned out=
 to be the easy part. The real engineering effort went into everything arou=
nd it, such as a central registry, a two-layer auth system, a unified deplo=
yment pipeline, and observability baked in from day one.</p><p style=3D"mar=
gin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text=
-align: justify">In this article, we look at how Pinterest designed that ec=
osystem and what they had to get right beyond the protocol itself.</p><p st=
yle=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size:=
 16px;text-align: justify"><em>Disclaimer: This post is based on publicly s=
hared details from the Pinterest Engineering Team. Please comment if you no=
tice any inaccuracies.</em></p><h2 class=3D"header-anchor-post" style=3D"po=
sition: relative;font-family: 'SF Pro Display',-apple-system-headline,syste=
m-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,san=
s-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight:=
 bold;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: antialia=
sed;-webkit-appearance: optimizelegibility;-moz-appearance: optimizelegibil=
ity;appearance: optimizelegibility;margin: 1em 0 0.625em 0;color: rgb(54,55=
,55);line-height: 1.16em;font-size: calc(1.625em * 1);text-align: justify">=
What is MCP</h2><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-he=
ight: 26px;font-size: 16px;text-align: justify">Model Context Protocol (MCP=
) is an open-source standard that gives large language models a unified way=
 to talk to external tools and data sources.</p><div class=3D"captioned-ima=
ge-container-static" style=3D"font-size: 16px;line-height: 26px;margin: 32p=
x auto;"><figure style=3D"width: 100%;margin: 0 auto;"><table class=3D"imag=
e-wrapper" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" =
data-component-name=3D"Image2ToDOMStatic" style=3D"mso-padding-alt: 1em 0 1=
=2E6em;"><tbody><tr><td style=3D"text-a=
lign: center;"></td><td class=3D"conte=
nt" align=3D"left" width=3D"1456" style=3D"text-align: center;"><a class=3D=
"image-link" target=3D"_blank" href=3D"https://substack.com/redirect/7ae0f2=
b6-1212-4f4c-9d85-222b22d02bb0?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0k=
rRXGMy3p768BWtuZifRB-Zs" style=3D"position: relative;flex-direction: column=
;align-items: center;padding: 0;width: auto;height: auto;border: none;text-=
decoration: none;display: block;margin: 0;"><img class=3D"wide-image" data-=
attrs=3D"{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.co=
m/public/images/c0acd8c0-dcbb-4462-914c-207889b0bd28_2576x1520.png&quot;,&q=
uot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&q=
uot;:null,&quot;height&quot;:859,&quot;width&quot;:1456,&quot;resizeWidth&q=
uot;:null,&quot;bytes&quot;:350061,&quot;alt&quot;:null,&quot;title&quot;:n=
ull,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belo=
wTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;=
:&quot;https://blog.bytebytego.com/i/196933670?img=3Dhttps%3A%2F%2Fsubstack=
-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0acd8c0-dcbb-4462-914c-20=
7889b0bd28_2576x1520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&q=
uot;:null,&quot;offset&quot;:false}" alt=3D"" width=3D"550" height=3D"324.4=
848901098901" src=3D"https://substackcdn.com/image/fetch/$s_!qn5M!,w_1100,c=
_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-=
media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0acd8c0-dcbb-4462-914c-207889b0=
bd28_2576x1520.png" style=3D"border: none !important;vertical-align: middle=
;display: block;-ms-interpolation-mode: bicubic;height: auto;margin-bottom:=
 0;width: auto !important;max-width: 100% !important;margin: 0 auto;"></a><=
/td><td style=3D"text-align: center;"></td></tr></tbody></table></figure></=
div><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;f=
ont-size: 16px;text-align: justify">Instead of writing custom glue code bet=
ween every AI application and every tool it needs to access, MCP defines a =
shared client-server protocol. An AI surface acts as the client, an MCP ser=
ver wraps a tool or data source, and they communicate using a standardized =
format for discovering tools, invoking them, and returning structured resul=
ts.</p><div class=3D"captioned-image-container-static" style=3D"font-size: =
16px;line-height: 26px;margin: 32px auto;"><figure style=3D"width: 100%;mar=
gin: 0 auto;"><table class=3D"image-wrapper" width=3D"100%" border=3D"0" ce=
llspacing=3D"0" cellpadding=3D"0" data-component-name=3D"Image2ToDOMStatic"=
 style=3D"mso-padding-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-align=
: center;"></td><td class=3D"content" align=3D"left" width=3D"1456" style=
=3D"text-align: center;"><a class=3D"image-link" target=3D"_blank" href=3D"=
https://substack.com/redirect/ab931e5e-b611-442e-81b9-7251c6a01f12?j=3DeyJ1=
IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"posit=
ion: relative;flex-direction: column;align-items: center;padding: 0;width: =
auto;height: auto;border: none;text-decoration: none;display: block;margin:=
 0;"><img class=3D"wide-image" data-attrs=3D"{&quot;src&quot;:&quot;https:/=
/substack-post-media.s3.amazonaws.com/public/images/333c5263-12c0-4e4d-9b13=
-8d19f9e97055_2474x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;ful=
lscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:942,&quot;=
width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131780,&quo=
t;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&qu=
ot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot=
;:false,&quot;internalRedirect&quot;:&quot;https://blog.bytebytego.com/i/19=
6933670?img=3Dhttps%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2=
Fimages%2F333c5263-12c0-4e4d-9b13-8d19f9e97055_2474x1600.png&quot;,&quot;is=
Processing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" al=
t=3D"" width=3D"550" height=3D"355.8379120879121" src=3D"https://substackcd=
n.com/image/fetch/$s_!n9Ei!,w_1100,c_limit,f_auto,q_auto:good,fl_progressiv=
e:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimage=
s%2F333c5263-12c0-4e4d-9b13-8d19f9e97055_2474x1600.png" style=3D"border: no=
ne !important;vertical-align: middle;display: block;-ms-interpolation-mode:=
 bicubic;height: auto;margin-bottom: 0;width: auto !important;max-width: 10=
0% !important;margin: 0 auto;"></a></td><td style=3D"text-align: center;"><=
/td></tr></tbody></table></figure></div><p style=3D"margin: 0 0 20px 0;colo=
r: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">Bef=
ore MCP, connecting AI surfaces to internal tools was an N x M problem. Fiv=
e surfaces times ten tools equals fifty custom integrations to build and ma=
intain. MCP turns that into an N+M problem. You build five clients and ten =
servers, and any client can talk to any server. That is fifteen pieces of w=
ork instead of fifty, and the gap widens as you add more surfaces or tools.=
</p><div class=3D"captioned-image-container-static" style=3D"font-size: 16p=
x;line-height: 26px;margin: 32px auto;"><figure style=3D"width: 100%;margin=
: 0 auto;"><table class=3D"image-wrapper" width=3D"100%" border=3D"0" cells=
pacing=3D"0" cellpadding=3D"0" data-component-name=3D"Image2ToDOMStatic" st=
yle=3D"mso-padding-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-align: c=
enter;"></td><td class=3D"content" align=3D"left" width=3D"1456" style=3D"t=
ext-align: center;"><a class=3D"image-link" target=3D"_blank" href=3D"https=
://substack.com/redirect/410c546e-d425-46ae-8605-e6e9859c86b8?j=3DeyJ1IjoiN=
Gl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"position: =
relative;flex-direction: column;align-items: center;padding: 0;width: auto;=
height: auto;border: none;text-decoration: none;display: block;margin: 0;">=
<img class=3D"wide-image" data-attrs=3D"{&quot;src&quot;:&quot;https://subs=
tack-post-media.s3.amazonaws.com/public/images/d0d5cf78-b1ae-46f3-91d5-e310=
ad8fa76b_2998x1678.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscre=
en&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:815,&quot;width=
&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:260922,&quot;alt=
&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&=
quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:fal=
se,&quot;internalRedirect&quot;:&quot;https://blog.bytebytego.com/i/1969336=
70?img=3Dhttps%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimag=
es%2Fd0d5cf78-b1ae-46f3-91d5-e310ad8fa76b_2998x1678.png&quot;,&quot;isProce=
ssing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" alt=3D"=
" width=3D"550" height=3D"307.864010989011" src=3D"https://substackcdn.com/=
image/fetch/$s_!AUtX!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:stee=
p/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0=
d5cf78-b1ae-46f3-91d5-e310ad8fa76b_2998x1678.png" style=3D"border: none !im=
portant;vertical-align: middle;display: block;-ms-interpolation-mode: bicub=
ic;height: auto;margin-bottom: 0;width: auto !important;max-width: 100% !im=
portant;margin: 0 auto;"></a></td><td style=3D"text-align: center;"></td></=
tr></tbody></table></figure></div><p style=3D"margin: 0 0 20px 0;color: rgb=
(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">But MCP o=
nly defines the communication protocol. It does not handle authentication, =
authorization, deployment, service discovery, or governance.</p><p style=3D=
"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;=
text-align: justify">Those are the problems Pinterest had to solve on its o=
wn. In other words, the MCP spec provides the grammar, and Pinterest had to=
 build the entire school system around it.</p><h2 class=3D"header-anchor-po=
st" style=3D"position: relative;font-family: 'SF Pro Display',-apple-system=
-headline,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helv=
etica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbo=
l';font-weight: bold;-webkit-font-smoothing: antialiased;-moz-osx-font-smoo=
thing: antialiased;-webkit-appearance: optimizelegibility;-moz-appearance: =
optimizelegibility;appearance: optimizelegibility;margin: 1em 0 0.625em 0;c=
olor: rgb(54,55,55);line-height: 1.16em;font-size: calc(1.625em * 1);text-a=
lign: justify">Pinterest&#8217;s Three Architectural Bets</h2><p style=3D"m=
argin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;te=
xt-align: justify">When Pinterest decided to adopt MCP, three early decisio=
ns shaped the entire ecosystem. Each involved a genuine tradeoff, and under=
standing those tradeoffs helps us make sense of why the architecture looks =
the way it does.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);lin=
e-height: 26px;font-size: 16px;text-align: justify">See the diagram below t=
hat shows the overall architecture:</p><div class=3D"captioned-image-contai=
ner-static" style=3D"font-size: 16px;line-height: 26px;margin: 32px auto;">=
<figure style=3D"width: 100%;margin: 0 auto;"><table class=3D"image-wrapper=
" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" data-comp=
onent-name=3D"Image2ToDOMStatic" style=3D"mso-padding-alt: 1em 0 1.6em;"><t=
body><tr><td style=3D"text-align: center;"></td><td class=3D"content" align=
=3D"left" width=3D"1456" style=3D"text-align: center;"><a class=3D"image-li=
nk" target=3D"_blank" href=3D"https://substack.com/redirect/1da1e13f-5aa4-4=
08d-b9a5-dd9f36e9ed43?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p7=
68BWtuZifRB-Zs" style=3D"position: relative;flex-direction: column;align-it=
ems: center;padding: 0;width: auto;height: auto;border: none;text-decoratio=
n: none;display: block;margin: 0;"><img class=3D"wide-image" data-attrs=3D"=
{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/=
images/bcdfc21a-411f-4eea-ab98-31984a2dbb80_3336x2010.png&quot;,&quot;srcNo=
Watermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null=
,&quot;height&quot;:877,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null=
,&quot;bytes&quot;:273441,&quot;alt&quot;:null,&quot;title&quot;:null,&quot=
;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&=
quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;ht=
tps://blog.bytebytego.com/i/196933670?img=3Dhttps%3A%2F%2Fsubstack-post-med=
ia.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdfc21a-411f-4eea-ab98-31984a2dbb8=
0_3336x2010.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null=
,&quot;offset&quot;:false}" alt=3D"" width=3D"550" height=3D"331.2843406593=
4067" src=3D"https://substackcdn.com/image/fetch/$s_!4mQ3!,w_1100,c_limit,f=
_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3=
=2Eamazonaws.com%2Fpublic%2Fimages%2Fbc=
dfc21a-411f-4eea-ab98-31984a2dbb80_333=
6x2010.png" style=3D"border: none !important;vertical-align: middle;display=
: block;-ms-interpolation-mode: bicubic;height: auto;margin-bottom: 0;width=
: auto !important;max-width: 100% !important;margin: 0 auto;"></a></td><td =
style=3D"text-align: center;"></td></tr></tbody></table></figure></div><h3 =
class=3D"header-anchor-post" style=3D"position: relative;font-family: 'SF P=
ro Display',-apple-system-headline,system-ui,-apple-system,BlinkMacSystemFo=
nt,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe =
UI Emoji','Segoe UI Symbol';font-weight: bold;-webkit-font-smoothing: antia=
liased;-moz-osx-font-smoothing: antialiased;-webkit-appearance: optimizeleg=
ibility;-moz-appearance: optimizelegibility;appearance: optimizelegibility;=
margin: 1em 0 0.625em 0;color: rgb(54,55,55);line-height: 1.16em;font-size:=
 calc(1.375em * 1);text-align: justify">Bet 1: Cloud-hosted servers, not lo=
cal ones.</h3><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-heig=
ht: 26px;font-size: 16px;text-align: justify">MCP supports local servers th=
at run on a developer&#8217;s laptop and communicate over standard input/ou=
tput. Many individual developers use MCP this way with tools like Claude or=
 Cursor.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height=
: 26px;font-size: 16px;text-align: justify">Pinterest went the opposite dir=
ection.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height:=
 26px;font-size: 16px;text-align: justify">They explicitly optimized for in=
ternal cloud-hosted MCP servers, where their routing and security infrastru=
cture could be applied consistently. Local servers are still allowed for ex=
perimentation, but the so-called paved path at Pinterest is to write a serv=
er, deploy it to their cloud compute environment, and register it in their =
central catalog. Every tool call becomes a network request, which adds late=
ncy compared to a local server.</p><p style=3D"margin: 0 0 20px 0;color: rg=
b(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">However,=
 centralizing servers in the cloud meant that Pinterest could apply consist=
ent authentication, authorization, logging, and monitoring across every ser=
ver without relying on individual developers to configure those things corr=
ectly on their own machines.</p><h3 class=3D"header-anchor-post" style=3D"p=
osition: relative;font-family: 'SF Pro Display',-apple-system-headline,syst=
em-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sa=
ns-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight=
: bold;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: antiali=
ased;-webkit-appearance: optimizelegibility;-moz-appearance: optimizelegibi=
lity;appearance: optimizelegibility;margin: 1em 0 0.625em 0;color: rgb(54,5=
5,55);line-height: 1.16em;font-size: calc(1.375em * 1);text-align: justify"=
>Bet 2: Many small servers, not one giant one</h3><p style=3D"margin: 0 0 2=
0px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: ju=
stify">Pinterest debated building a single monolithic MCP server that expos=
ed every tool versus building multiple domain-specific servers. They chose =
the latter.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-hei=
ght: 26px;font-size: 16px;text-align: justify">For example, the Presto MCP =
server handles data queries. The Spark MCP server handles job debugging. Th=
e Knowledge MCP server handles documentation and institutional Q&amp;A. Eac=
h server owns a small, coherent set of tools.</p><p style=3D"margin: 0 0 20=
px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: jus=
tify">Two forces drove this decision.</p><ul style=3D"margin-top: 0;padding=
: 0;"><li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p sty=
le=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: b=
order-box;padding-left: 4px;font-size: 16px;margin: 0;text-align: justify">=
First, different servers need different access controls. The Presto server =
touches sensitive business data and requires strict group-based gating. A d=
ocumentation server is lower risk and can be more broadly accessible. Bundl=
ing them into one server would force a single access policy across tools wi=
th very different sensitivity levels.</p></li><li style=3D"margin: 8px 0 0 =
32px;mso-special-format: bullet;"><p style=3D"color: rgb(54,55,55);line-hei=
ght: 26px;margin-bottom: 0;box-sizing: border-box;padding-left: 4px;font-si=
ze: 16px;margin: 0;text-align: justify">Second, every tool description cons=
umes tokens in the AI model&#8217;s context window, which is the limited am=
ount of text the model can process in a single interaction. A monolithic se=
rver with fifty tools would stuff the model&#8217;s prompt with tool descri=
ptions it does not need for the current task, crowding out space for the ac=
tual conversation.</p></li></ul><p style=3D"margin: 0 0 20px 0;color: rgb(5=
4,55,55);line-height: 26px;font-size: 16px;text-align: justify">Domain-spec=
ific servers keep the tool list small and relevant. This context window con=
straint is uniquely AI-specific because in a traditional microservices setu=
p, you would not worry about your service catalog consuming tokens.</p><p s=
tyle=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size=
: 16px;text-align: justify">The tradeoff here is more operational overhead =
per server, since each one needs deployment, monitoring, and ownership. Thi=
s cost led directly to the third bet.</p><h3 class=3D"header-anchor-post" s=
tyle=3D"position: relative;font-family: 'SF Pro Display',-apple-system-head=
line,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica=
,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';fo=
nt-weight: bold;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing=
: antialiased;-webkit-appearance: optimizelegibility;-moz-appearance: optim=
izelegibility;appearance: optimizelegibility;margin: 1em 0 0.625em 0;color:=
 rgb(54,55,55);line-height: 1.16em;font-size: calc(1.375em * 1);text-align:=
 justify">Bet 3: A unified deployment pipeline</h3><p style=3D"margin: 0 0 =
20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: j=
ustify">Early feedback from teams was clear. Spinning up a new MCP server r=
equired too much boilerplate, including deployment pipelines, service confi=
guration, and operational setup, all before anyone could write a single lin=
e of business logic.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55)=
;line-height: 26px;font-size: 16px;text-align: justify">The Pinterest engin=
eering team responded by building a unified deployment pipeline. Teams defi=
ne their tools, and the platform handles deployment, scaling, and infrastru=
cture. This turned what had been a multi-day setup process into something w=
here domain experts could focus entirely on their business logic. Without t=
his investment, the bet around many small servers would have collapsed unde=
r its own operational weight.</p><p style=3D"margin: 0 0 20px 0;color: rgb(=
54,55,55);line-height: 26px;font-size: 16px;text-align: justify">Sitting be=
neath all of this is the MCP registry, a central catalog that serves as the=
 source of truth for which servers exist, who owns them, and how to connect=
 to them. It has two faces.</p><ul style=3D"margin-top: 0;padding: 0;"><li =
style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p style=3D"colo=
r: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: border-box;=
padding-left: 4px;font-size: 16px;margin: 0;text-align: justify">A web UI l=
ets humans browse available servers, see their live status, find the owning=
 team and support channels, and inspect visible tools.</p></li><li style=3D=
"margin: 8px 0 0 32px;mso-special-format: bullet;"><p style=3D"color: rgb(5=
4,55,55);line-height: 26px;margin-bottom: 0;box-sizing: border-box;padding-=
left: 4px;font-size: 16px;margin: 0;text-align: justify">An API lets AI cli=
ents programmatically discover servers, validate them, and check whether a =
given user is authorized to access a given server.</p></li></ul><p style=3D=
"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;=
text-align: justify">Only servers registered here count as approved for pro=
duction use. In other words, the registry is not just a phone book, but the=
 governance backbone of the entire ecosystem.</p><h2 class=3D"header-anchor=
-post" style=3D"position: relative;font-family: 'SF Pro Display',-apple-sys=
tem-headline,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,H=
elvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Sy=
mbol';font-weight: bold;-webkit-font-smoothing: antialiased;-moz-osx-font-s=
moothing: antialiased;-webkit-appearance: optimizelegibility;-moz-appearanc=
e: optimizelegibility;appearance: optimizelegibility;margin: 1em 0 0.625em =
0;color: rgb(54,55,55);line-height: 1.16em;font-size: calc(1.625em * 1);tex=
t-align: justify">Two Layers of Auth</h2><p style=3D"margin: 0 0 20px 0;col=
or: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">Gi=
ving AI agents access to tools that touch real production systems and sensi=
tive data raises immediate security concerns.</p><p style=3D"margin: 0 0 20=
px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: jus=
tify">Pinterest treated MCP as a joint project with their security team fro=
m day one, and the result is a two-layer authorization model that deserves =
careful attention.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);l=
ine-height: 26px;font-size: 16px;text-align: justify">See the diagram below=
:</p><div class=3D"captioned-image-container-static" style=3D"font-size: 16=
px;line-height: 26px;margin: 32px auto;"><figure style=3D"width: 100%;margi=
n: 0 auto;"><table class=3D"image-wrapper" width=3D"100%" border=3D"0" cell=
spacing=3D"0" cellpadding=3D"0" data-component-name=3D"Image2ToDOMStatic" s=
tyle=3D"mso-padding-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-align: =
center;"></td><td class=3D"content" align=3D"left" width=3D"1456" style=3D"=
text-align: center;"><a class=3D"image-link" target=3D"_blank" href=3D"http=
s://substack.com/redirect/6cd0f8bd-1650-40db-950f-0460e48e2b80?j=3DeyJ1Ijoi=
NGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"position:=
 relative;flex-direction: column;align-items: center;padding: 0;width: auto=
;height: auto;border: none;text-decoration: none;display: block;margin: 0;"=
><img class=3D"wide-image" data-attrs=3D"{&quot;src&quot;:&quot;https://sub=
stack-post-media.s3.amazonaws.com/public/images/33838bcb-4b89-4899-a9fa-192=
e8920a4f9_2498x1416.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscr=
een&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:825,&quot;widt=
h&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:174328,&quot;al=
t&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,=
&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:fa=
lse,&quot;internalRedirect&quot;:&quot;https://blog.bytebytego.com/i/196933=
670?img=3Dhttps%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fima=
ges%2F33838bcb-4b89-4899-a9fa-192e8920a4f9_2498x1416.png&quot;,&quot;isProc=
essing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" alt=3D=
"" width=3D"550" height=3D"311.6414835164835" src=3D"https://substackcdn.co=
m/image/fetch/$s_!c0I9!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:st=
eep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F=
33838bcb-4b89-4899-a9fa-192e8920a4f9_2498x1416.png" style=3D"border: none !=
important;vertical-align: middle;display: block;-ms-interpolation-mode: bic=
ubic;height: auto;margin-bottom: 0;width: auto !important;max-width: 100% !=
important;margin: 0 auto;"></a></td><td style=3D"text-align: center;"></td>=
</tr></tbody></table></figure></div><p style=3D"margin: 0 0 20px 0;color: r=
gb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">Conside=
r what happens when an engineer opens Pinterest&#8217;s internal AI chat an=
d asks the agent to query revenue data from the data warehouse. That single=
 request crosses multiple systems as mentioned below:</p><ul style=3D"margi=
n-top: 0;padding: 0;"><li style=3D"margin: 8px 0 0 32px;mso-special-format:=
 bullet;"><p style=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom:=
 0;box-sizing: border-box;padding-left: 4px;font-size: 16px;margin: 0;text-=
align: justify">The chat frontend talks to the MCP registry to find availab=
le servers.</p></li><li style=3D"margin: 8px 0 0 32px;mso-special-format: b=
ullet;"><p style=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0=
;box-sizing: border-box;padding-left: 4px;font-size: 16px;margin: 0;text-al=
ign: justify">The request gets routed to the Presto MCP server, which runs =
a query against a real database containing business-sensitive information.<=
/p></li><li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p s=
tyle=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing:=
 border-box;padding-left: 4px;font-size: 16px;margin: 0;text-align: justify=
">At every hop, the system needs to answer two questions. Who is this perso=
n? And are they allowed to do this specific thing?</p></li></ul><p style=3D=
"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;=
text-align: justify">Layer 1 handles coarse-grained checks at the network e=
dge.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26=
px;font-size: 16px;text-align: justify">When an engineer opens any AI surfa=
ce at Pinterest, they go through an OAuth flow, which is the standard proce=
ss for logging in with a company account and granting the application permi=
ssion to act on the user&#8217;s behalf. This produces a JWT (JSON Web Toke=
n), a small signed token that encodes the user&#8217;s identity and group m=
emberships. That JWT travels with every subsequent request.</p><div class=
=3D"captioned-image-container-static" style=3D"font-size: 16px;line-height:=
 26px;margin: 32px auto;"><figure style=3D"width: 100%;margin: 0 auto;"><ta=
ble class=3D"image-wrapper" width=3D"100%" border=3D"0" cellspacing=3D"0" c=
ellpadding=3D"0" data-component-name=3D"Image2ToDOMStatic" style=3D"mso-pad=
ding-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-align: center;"></td><=
td class=3D"content" align=3D"left" width=3D"1456" style=3D"text-align: cen=
ter;"><a class=3D"image-link" target=3D"_blank" href=3D"https://substack.co=
m/redirect/b9ec2921-d1e0-4c68-878d-8527641c8e36?j=3DeyJ1IjoiNGl3b2U2In0.sVD=
xRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"position: relative;flex-=
direction: column;align-items: center;padding: 0;width: auto;height: auto;b=
order: none;text-decoration: none;display: block;margin: 0;"><img class=3D"=
wide-image" data-attrs=3D"{&quot;src&quot;:&quot;https://substack-post-medi=
a.s3.amazonaws.com/public/images/de99cc29-698e-4c6e-aeab-206f5ef376b4_1722x=
1246.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,=
&quot;imageSize&quot;:null,&quot;height&quot;:1054,&quot;width&quot;:1456,&=
quot;resizeWidth&quot;:null,&quot;bytes&quot;:85140,&quot;alt&quot;:null,&q=
uot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot=
;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;inter=
nalRedirect&quot;:&quot;https://blog.bytebytego.com/i/196933670?img=3Dhttps=
%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde99cc29-=
698e-4c6e-aeab-206f5ef376b4_1722x1246.png&quot;,&quot;isProcessing&quot;:fa=
lse,&quot;align&quot;:null,&quot;offset&quot;:false}" alt=3D"" width=3D"550=
" height=3D"398.1456043956044" src=3D"https://substackcdn.com/image/fetch/$=
s_!1586!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F=
%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde99cc29-698e-4=
c6e-aeab-206f5ef376b4_1722x1246.png" style=3D"border: none !important;verti=
cal-align: middle;display: block;-ms-interpolation-mode: bicubic;height: au=
to;margin-bottom: 0;width: auto !important;max-width: 100% !important;margi=
n: 0 auto;"></a></td><td style=3D"text-align: center;"></td></tr></tbody></=
table></figure></div><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);li=
ne-height: 26px;font-size: 16px;text-align: justify">Before a request reach=
es any MCP server, it passes through Envoy, a network proxy that sits in fr=
ont of every service in Pinterest&#8217;s infrastructure. Envoy validates t=
he JWT by checking the signature and expiration, then converts it into stan=
dard headers like X-Forwarded-User and X-Forwarded-Groups.</p><p style=3D"m=
argin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;te=
xt-align: justify">Envoy also enforces coarse-grained access policies. Thes=
e are broad rules like &#8220;the production AI chat application may talk t=
o the Presto MCP server, but experimental servers running in the dev namesp=
ace are off-limits.&#8221; If the request violates these rules, it gets rej=
ected before the MCP server ever sees it. Think of Envoy as the building se=
curity desk. It checks your badge and makes sure you are supposed to be in =
the building at all.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55)=
;line-height: 26px;font-size: 16px;text-align: justify">Layer 2 handles fin=
e-grained checks inside each server.</p><p style=3D"margin: 0 0 20px 0;colo=
r: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">Eve=
n if Envoy lets a request through, the MCP server applies a second layer of=
 authorization at the individual tool level. Pinterest uses a decorator pat=
tern on tool functions (@authorize_tool(policy=3D&#8217;...&#8217;)) that c=
hecks whether the specific user is allowed to invoke that specific tool.</p=
><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font=
-size: 16px;text-align: justify">For example, the Presto MCP server might b=
e reachable by many teams, but only the Ads engineering group can call a to=
ol like get_revenue_metrics. This is like the difference between being allo=
wed into the building and being allowed into a specific room.</p><p style=
=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16=
px;text-align: justify">For servers that handle particularly sensitive data=
, Pinterest adds business-group gating. The server extracts the user&#8217;=
s business group membership from their JWT and checks it against an approve=
d list before even establishing a session. This list of approved groups is =
set during the initial security review when the server is first registered.=
</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;f=
ont-size: 16px;text-align: justify">For example, even though the Presto MCP=
 server is technically reachable from Pinterest&#8217;s broadly used AI cha=
t interface, only specific groups like Ads, Finance, or certain infrastruct=
ure teams can actually connect and run queries. This means that turning on =
a powerful, data-heavy server in a popular surface does not silently expand=
 who can see sensitive data.</p><p style=3D"margin: 0 0 20px 0;color: rgb(5=
4,55,55);line-height: 26px;font-size: 16px;text-align: justify">Why two lay=
ers instead of one?</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);=
line-height: 26px;font-size: 16px;text-align: justify">Envoy&#8217;s polici=
es are fast, network-level checks that block obviously unauthorized traffic=
 before it reaches any application code. The tool-level decorators handle n=
uanced, business-logic-specific permissions that a network proxy is not equ=
ipped to reason about. Together, they provide defense in depth. Even if one=
 layer has a misconfiguration, the other still catches unauthorized access.=
</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;f=
ont-size: 16px;text-align: justify">The official MCP specification defines =
an OAuth 2.0 authorization flow where users authenticate with each MCP serv=
er individually, typically involving consent screens and per-server token m=
anagement. Pinterest skipped this entirely. Since they control the entire i=
nternal environment, they piggyback on the auth session the user already ha=
s when they open an AI surface. There is no additional login prompt or cons=
ent dialog when a user invokes an MCP tool.</p><p style=3D"margin: 0 0 20px=
 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justi=
fy">This is simpler for end users, but only works because Pinterest owns ev=
ery piece of the stack. A company relying on third-party MCP servers would =
likely need the per-server OAuth approach described in the spec.</p><p styl=
e=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 1=
6px;text-align: justify">Lastly, for automated service-to-service calls whe=
re there is no human in the loop, Pinterest uses SPIFFE-based authenticatio=
n. In this pattern, the calling service proves its identity through a crypt=
ographic certificate issued by the service mesh rather than presenting a hu=
man&#8217;s JWT. Pinterest reserves this for low-risk, read-only scenarios =
where the blast radius is tightly constrained.</p><h2 class=3D"header-ancho=
r-post" style=3D"position: relative;font-family: 'SF Pro Display',-apple-sy=
stem-headline,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,=
Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI S=
ymbol';font-weight: bold;-webkit-font-smoothing: antialiased;-moz-osx-font-=
smoothing: antialiased;-webkit-appearance: optimizelegibility;-moz-appearan=
ce: optimizelegibility;appearance: optimizelegibility;margin: 1em 0 0.625em=
 0;color: rgb(54,55,55);line-height: 1.16em;font-size: calc(1.625em * 1);te=
xt-align: justify">Meeting Engineers Where They Already Work</h2><p style=
=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16=
px;text-align: justify">Pinterest was deliberate about one thing. MCP could=
 not be a science project that lived in its own separate interface. It had =
to show up in the tools that engineers already use every day.</p><p style=
=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16=
px;text-align: justify">The diagram below shows how the MCP integration has=
 been done across various surfaces at Pinterest.</p><div class=3D"captioned=
-image-container-static" style=3D"font-size: 16px;line-height: 26px;margin:=
 32px auto;"><figure style=3D"width: 100%;margin: 0 auto;"><table class=3D"=
image-wrapper" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D=
"0" data-component-name=3D"Image2ToDOMStatic" style=3D"mso-padding-alt: 1em=
 0 1.6em;"><tbody><tr><td style=3D"text-align: center;"></td><td class=3D"c=
ontent" align=3D"left" width=3D"1456" style=3D"text-align: center;"><a clas=
s=3D"image-link" target=3D"_blank" href=3D"https://substack.com/redirect/e2=
4427ed-b1cc-4303-aa4b-5a41a89a8b69?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfda=
mY0krRXGMy3p768BWtuZifRB-Zs" style=3D"position: relative;flex-direction: co=
lumn;align-items: center;padding: 0;width: auto;height: auto;border: none;t=
ext-decoration: none;display: block;margin: 0;"><img class=3D"wide-image" d=
ata-attrs=3D"{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaw=
s.com/public/images/248d1662-1ada-4da5-8cec-441567c2a9e3_2310x1236.png&quot=
;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSi=
ze&quot;:null,&quot;height&quot;:779,&quot;width&quot;:1456,&quot;resizeWid=
th&quot;:null,&quot;bytes&quot;:150200,&quot;alt&quot;:null,&quot;title&quo=
t;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;=
belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&q=
uot;:&quot;https://blog.bytebytego.com/i/196933670?img=3Dhttps%3A%2F%2Fsubs=
tack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F248d1662-1ada-4da5-8ce=
c-441567c2a9e3_2310x1236.png&quot;,&quot;isProcessing&quot;:false,&quot;ali=
gn&quot;:null,&quot;offset&quot;:false}" alt=3D"" width=3D"550" height=3D"2=
94.2651098901099" src=3D"https://substackcdn.com/image/fetch/$s_!zdKK!,w_11=
00,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-p=
ost-media.s3.amazonaws.com%2Fpublic%2Fimages%2F248d1662-1ada-4da5-8cec-4415=
67c2a9e3_2310x1236.png" style=3D"border: none !important;vertical-align: mi=
ddle;display: block;-ms-interpolation-mode: bicubic;height: auto;margin-bot=
tom: 0;width: auto !important;max-width: 100% !important;margin: 0 auto;"><=
/a></td><td style=3D"text-align: center;"></td></tr></tbody></table><figcap=
tion class=3D"image-caption" style=3D"box-sizing: content-box;color: rgb(11=
9,119,119);font-size: 14px;line-height: 20px;font-weight: 400;letter-spacin=
g: -.15px;margin-top: 8px;width: 70%;padding-left: 15%;padding-right: 15%;t=
ext-align: center;"><span>Source: </span><a href=3D"https://substack.com/re=
direct/e46a8d27-0b00-4caf-b9ea-4773ca672cfc?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtm=
Z85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"text-decoration: underline;"=
>Pinterest Engineering Blog</a></figcaption></figure></div><p style=3D"marg=
in: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-=
align: justify">Pinterest&#8217;s internal AI chat interface is used by the=
 majority of employees daily. The frontend automatically handles OAuth flow=
s and returns a list of usable MCP tools scoped to the current user&#8217;s=
 permissions. Once connected, the AI agent binds MCP tools directly into it=
s toolset, so invoking an MCP tool feels identical to calling any other bui=
lt-in capability. From the user&#8217;s perspective, they are just asking t=
he AI to do something, and the MCP plumbing is invisible.</p><p style=3D"ma=
rgin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;tex=
t-align: justify">Pinterest also embeds AI bots in its internal communicati=
on platform, and these bots expose MCP tools as well. Auth is handled throu=
gh the registry API, just like the web interface. These bots support contex=
t-aware tool scoping, meaning certain MCP tools are restricted to certain c=
hannels. Spark MCP tools, for example, only appear in Airflow support chann=
els. This keeps tool lists relevant to the conversation and prevents users =
from accidentally invoking tools that do not make sense in a given context.=
</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;f=
ont-size: 16px;text-align: justify">AI-enabled IDEs can pull data through t=
he Presto MCP server on demand, so agents bring data directly into coding w=
orkflows instead of requiring engineers to switch to a separate dashboard. =
CLI agents provide similar capabilities for terminal-based workflows.</p><p=
 style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-si=
ze: 16px;text-align: justify">The servers that see the heaviest usage refle=
ct the most common engineering pain points.</p><ul style=3D"margin-top: 0;p=
adding: 0;"><li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;">=
<p style=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-siz=
ing: border-box;padding-left: 4px;font-size: 16px;margin: 0;text-align: jus=
tify">The Presto MCP server is consistently the highest-traffic server beca=
use data access is a universal need across teams.</p></li><li style=3D"marg=
in: 8px 0 0 32px;mso-special-format: bullet;"><p style=3D"color: rgb(54,55,=
55);line-height: 26px;margin-bottom: 0;box-sizing: border-box;padding-left:=
 4px;font-size: 16px;margin: 0;text-align: justify">The Spark MCP server un=
derpins Pinterest&#8217;s AI-assisted debugging experience, where agents di=
agnose job failures, summarize logs, and help record structured root-cause =
analyses, turning noisy operational threads into reusable knowledge.</p></l=
i><li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p style=
=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: bor=
der-box;padding-left: 4px;font-size: 16px;margin: 0;text-align: justify">Th=
e Knowledge MCP server acts as a general-purpose endpoint for institutional=
 knowledge, giving agents the ability to search documentation and answer qu=
estions across internal sources.</p></li></ul><p style=3D"margin: 0 0 20px =
0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justif=
y">Since MCP servers enable automated actions, the blast radius of a mistak=
e is larger than if a human manually performed the same steps.</p><p style=
=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16=
px;text-align: justify">Pinterest&#8217;s agent guidance mandates human-in-=
the-loop approval before any sensitive or expensive action. Agents propose =
actions, humans approve or reject (optionally in batches) before execution.=
 Pinterest also uses elicitation for dangerous operations, where the AI exp=
licitly asks the user to confirm before performing something like overwriti=
ng data in a table. This is a governance decision.</p><h2 class=3D"header-a=
nchor-post" style=3D"position: relative;font-family: 'SF Pro Display',-appl=
e-system-headline,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Rob=
oto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe =
UI Symbol';font-weight: bold;-webkit-font-smoothing: antialiased;-moz-osx-f=
ont-smoothing: antialiased;-webkit-appearance: optimizelegibility;-moz-appe=
arance: optimizelegibility;appearance: optimizelegibility;margin: 1em 0 0.6=
25em 0;color: rgb(54,55,55);line-height: 1.16em;font-size: calc(1.625em * 1=
);text-align: justify">Measurements</h2><p style=3D"margin: 0 0 20px 0;colo=
r: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">Pin=
terest built observability into the MCP ecosystem from the start rather tha=
n treating it as an afterthought. All MCP servers use a set of shared libra=
ry functions that provide logging for inputs and outputs, invocation counts=
, exception tracing, and other telemetry out of the box. This is part of th=
e server framework itself, so teams get observability for free when they us=
e the unified deployment pipeline.</p><p style=3D"margin: 0 0 20px 0;color:=
 rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">At th=
e ecosystem level, Pinterest tracks the number of registered servers and to=
ols, invocation counts across all servers, and a north-star metric that rol=
ls everything up into a single number. That number is the time saved. For e=
ach tool, server owners provide a &#8220;minutes saved per invocation&#8221=
; estimate, based on lightweight user feedback and comparison to the prior =
manual workflow. Multiplied by invocation counts, this gives an order-of-ma=
gnitude view of impact.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,=
55);line-height: 26px;font-size: 16px;text-align: justify">As of January 20=
25, MCP servers at Pinterest were handling 66,000 invocations per month acr=
oss 844 monthly active users. Using the owner-provided estimates, MCP tools=
 were saving on the order of approximately 7,000 hours per month.</p><h2 cl=
ass=3D"header-anchor-post" style=3D"position: relative;font-family: 'SF Pro=
 Display',-apple-system-headline,system-ui,-apple-system,BlinkMacSystemFont=
,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI=
 Emoji','Segoe UI Symbol';font-weight: bold;-webkit-font-smoothing: antiali=
ased;-moz-osx-font-smoothing: antialiased;-webkit-appearance: optimizelegib=
ility;-moz-appearance: optimizelegibility;appearance: optimizelegibility;ma=
rgin: 1em 0 0.625em 0;color: rgb(54,55,55);line-height: 1.16em;font-size: c=
alc(1.625em * 1);text-align: justify">Conclusion</h2><p style=3D"margin: 0 =
0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align:=
 justify">Pinterest&#8217;s MCP ecosystem offers a clear blueprint for orga=
nizations building AI agents that need to act on internal systems. The patt=
ern they established, a standard protocol, a central registry, layered auth=
, a unified deployment pipeline, and built-in observability, is transferabl=
e well beyond Pinterest&#8217;s specific context.</p><p style=3D"margin: 0 =
0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align:=
 justify">The most important lesson is where the effort actually went. The =
MCP protocol gave Pinterest a shared language between AI surfaces and tools=
=2E That was necessary but far from suf=
ficient. The registry, auth layers, de=
ployment pipeline, and measurement framework are what turned a promising pr=
otocol into a production system handling tens of thousands of invocations p=
er month.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-heigh=
t: 26px;font-size: 16px;text-align: justify">To conclude, Pinterest&#8217;s=
 approach suggests a practical starting point of seeding a small set of hig=
h-leverage MCP servers that solve real pain points, then invest in the plat=
form work, especially the deployment pipeline, that makes it easy for other=
 teams to build on top. Pinterest&#8217;s unified pipeline was the unlock t=
hat turned a platform team project into an org-wide ecosystem.</p><p style=
=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16=
px;text-align: justify"><strong>References:</strong></p><ul style=3D"margin=
-top: 0;padding: 0;margin-bottom: 0;"><li style=3D"margin: 8px 0 0 32px;mso=
-special-format: bullet;"><p style=3D"color: rgb(54,55,55);line-height: 26p=
x;margin-bottom: 0;box-sizing: border-box;padding-left: 4px;font-size: 16px=
;margin: 0;text-align: justify"><a href=3D"https://substack.com/redirect/e4=
6a8d27-0b00-4caf-b9ea-4773ca672cfc?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfda=
mY0krRXGMy3p768BWtuZifRB-Zs" style=3D"color: #7756e3;text-decoration: none;=
">Building an MCP Ecosystem at Pinterest</a></p></li><li style=3D"margin: 8=
px 0 0 32px;mso-special-format: bullet;"><p style=3D"color: rgb(54,55,55);l=
ine-height: 26px;margin-bottom: 0;box-sizing: border-box;padding-left: 4px;=
font-size: 16px;margin: 0;text-align: justify"><a href=3D"https://substack.=
com/redirect/b9103e86-78bb-4524-bf65-6aa0cba6565c?j=3DeyJ1IjoiNGl3b2U2In0.s=
VDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"color: #7756e3;text-de=
coration: none;">Introducing the Model Context Protocol</a></p></li></ul></=
div></div><div class=3D"postscript-placeholder" style=3D"margin: 32px 0 0;w=
idth: 100%;box-sizing: border-box;font-size: 16px;line-height: 26px;"></div=
><table class=3D"email-ufi-2-bottom" role=3D"presentation" width=3D"100%" b=
order=3D"0" cellspacing=3D"0" cellpadding=3D"0" style=3D"border-top: 1px so=
lid rgb(0,0,0,.1);border-bottom: 1px solid rgb(0,0,0,.1);min-width: 100%;">=
<tbody><tr height=3D"16"><td height=3D"16" style=3D"font-size:0px;line-heig=
ht:0;">&nbsp;</td></tr><tr><td><table class=3D"email-ufi-2-row" role=3D"pre=
sentation" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" =
style=3D"border-bottom: 1px solid rgb(0,0,0,.1);"><tbody><tr><td width=3D"9=
5%"><table class=3D"email-button-outline-wrapper-full-width" role=3D"presen=
tation" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" sty=
le=3D"width: 95%;margin: 0 auto;"><tbody><tr><td align=3D"center"><a class=
=3D"email-button-outline full-width" href=3D"https://substack.com/app-link/=
post?publication_id=3D817132&post_id=3D196933670&utm_source=3Dsubstack&utm_=
medium=3Demail&utm_content=3Dshare&utm_campaign=3Demail-share&action=3Dshar=
e&triggerShare=3Dtrue&isFreemail=3Dtrue&r=3D4iwoe6&token=3DeyJ1c2VyX2lkIjoy=
NzM2MjIzOTgsInBvc3RfaWQiOjE5NjkzMzY3MCwiaWF0IjoxNzc4NTE0MTkwLCJleHAiOjE3ODE=
xMDYxOTAsImlzcyI6InB1Yi04MTcxMzIiLCJzdWIiOiJwb3N0LXJlYWN0aW9uIn0.G9YPeH91zF=
lYHXYWap5AQu-ZJDvnjA7znj-ciZ3JhdY" style=3D"font-family: system-ui,-apple-s=
ystem,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Appl=
e Color Emoji','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;fon=
t-weight: 500;border: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-tr=
ansform: uppercase;font-size: 12px;line-height: 12px;padding: 9px 14px;text=
-decoration: none;color: rgb(119,119,119);width: 100%;padding-left: 0;paddi=
ng-right: 0;"><img class=3D"icon" src=3D"https://substackcdn.com/image/fetc=
h/$s_!rmYa!,w_36,c_scale,f_png,q_auto:good,fl_progressive:steep/https%3A%2F=
%2Fsubstack.com%2Ficon%2FLucideShare%3Fv%3D4%26height%3D36%26fill%3Dnone%26=
stroke%3D%2523808080%26strokeWidth%3D2" width=3D"18" height=3D"18" style=3D=
"margin-right: 8px;min-width: 18px;min-height: 18px;border: none;vertical-a=
lign: middle;max-width: 18px" alt=3D""><span class=3D"email-button-text" st=
yle=3D"vertical-align: middle;">Share</span></a></td></tr></tbody></table><=
/td></tr><tr height=3D"16"><td height=3D"16" style=3D"font-size:0px;line-he=
ight:0;">&nbsp;</td></tr></tbody></table></td></tr><tr height=3D"16"><td he=
ight=3D"16" style=3D"font-size:0px;line-height:0;">&nbsp;</td></tr><tr><td>=
<table role=3D"presentation" width=3D"100%" border=3D"0" cellspacing=3D"0" =
cellpadding=3D"0"><tbody><tr><td><table role=3D"presentation" width=3D"auto=
" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" style=3D"margin:0 auto;"=
><tbody><tr><td style=3D"vertical-align:middle;"><table role=3D"presentatio=
n" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><=
tr><td align=3D"center"><a class=3D"email-button-outline" href=3D"https://s=
ubstack.com/app-link/post?publication_id=3D817132&post_id=3D196933670&utm_s=
ource=3Dsubstack&isFreemail=3Dtrue&submitLike=3Dtrue&token=3DeyJ1c2VyX2lkIj=
oyNzM2MjIzOTgsInBvc3RfaWQiOjE5NjkzMzY3MCwicmVhY3Rpb24iOiLinaQiLCJpYXQiOjE3N=
zg1MTQxOTAsImV4cCI6MTc4MTEwNjE5MCwiaXNzIjoicHViLTgxNzEzMiIsInN1YiI6InJlYWN0=
aW9uIn0.1zbCjr0oW7aKThyT1BLNAB6LHOXkvNjSOUYgJAljw_o&utm_medium=3Demail&utm_=
campaign=3Demail-reaction&r=3D4iwoe6" style=3D"font-family: system-ui,-appl=
e-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'A=
pple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;=
font-weight: 500;border: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text=
-transform: uppercase;font-size: 12px;line-height: 12px;padding: 9px 14px;t=
ext-decoration: none;color: rgb(119,119,119);"><img class=3D"icon" src=3D"h=
ttps://substackcdn.com/image/fetch/$s_!PeVs!,w_36,c_scale,f_png,q_auto:good=
,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucideHeart%3Fv%3=
D4%26height%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" wi=
dth=3D"18" height=3D"18" style=3D"margin-right: 8px;min-width: 18px;min-hei=
ght: 18px;border: none;vertical-align: middle;max-width: 18px" alt=3D""><sp=
an class=3D"email-button-text" style=3D"vertical-align: middle;">Like</span=
></a></td></tr></tbody></table></td><td width=3D"8" style=3D"min-width:8px;=
"></td><td style=3D"vertical-align:middle;"><table role=3D"presentation" wi=
dth=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><t=
d align=3D"center"><a class=3D"email-button-outline" href=3D"https://substa=
ck.com/app-link/post?publication_id=3D817132&post_id=3D196933670&utm_source=
=3Dsubstack&utm_medium=3Demail&isFreemail=3Dtrue&comments=3Dtrue&token=3Dey=
J1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5NjkzMzY3MCwiaWF0IjoxNzc4NTE0MTkwL=
CJleHAiOjE3ODExMDYxOTAsImlzcyI6InB1Yi04MTcxMzIiLCJzdWIiOiJwb3N0LXJlYWN0aW9u=
In0.G9YPeH91zFlYHXYWap5AQu-ZJDvnjA7znj-ciZ3JhdY&r=3D4iwoe6&utm_campaign=3De=
mail-half-magic-comments&action=3Dpost-comment&utm_source=3Dsubstack&utm_me=
dium=3Demail" style=3D"font-family: system-ui,-apple-system,BlinkMacSystemF=
ont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe=
 UI Emoji','Segoe UI Symbol';display: inline-block;font-weight: 500;border:=
 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-transform: uppercase;fo=
nt-size: 12px;line-height: 12px;padding: 9px 14px;text-decoration: none;col=
or: rgb(119,119,119);"><img class=3D"icon" src=3D"https://substackcdn.com/i=
mage/fetch/$s_!x1tS!,w_36,c_scale,f_png,q_auto:good,fl_progressive:steep/ht=
tps%3A%2F%2Fsubstack.com%2Ficon%2FLucideComments%3Fv%3D4%26height%3D36%26fi=
ll%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D"18" height=3D"=
18" style=3D"margin-right: 8px;min-width: 18px;min-height: 18px;border: non=
e;vertical-align: middle;max-width: 18px" alt=3D""><span class=3D"email-but=
ton-text" style=3D"vertical-align: middle;">Comment</span></a></td></tr></t=
body></table></td><td width=3D"8" style=3D"min-width:8px;"></td><td style=
=3D"vertical-align:middle;"><table role=3D"presentation" width=3D"auto" bor=
der=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D"cente=
r"><a class=3D"email-button-outline" href=3D"https://substack.com/redirect/=
2/eyJlIjoiaHR0cHM6Ly9vcGVuLnN1YnN0YWNrLmNvbS9wdWIvYnl0ZWJ5dGVnby9wL2hvdy1wa=
W50ZXJlc3QtYnVpbHQtYS1wcm9kdWN0aW9uP3V0bV9zb3VyY2U9c3Vic3RhY2smdXRtX21lZGl1=
bT1lbWFpbCZ1dG1fY2FtcGFpZ249ZW1haWwtcmVzdGFjay1jb21tZW50JmFjdGlvbj1yZXN0YWN=
rLWNvbW1lbnQmcj00aXdvZTYmdG9rZW49ZXlKMWMyVnlYMmxrSWpveU56TTJNakl6T1Rnc0luQn=
ZjM1JmYVdRaU9qRTVOamt6TXpZM01Dd2lhV0YwSWpveE56YzROVEUwTVRrd0xDSmxlSEFpT2pFM=
09ERXhNRFl4T1RBc0ltbHpjeUk2SW5CMVlpMDRNVGN4TXpJaUxDSnpkV0lpT2lKd2IzTjBMWEps=
WVdOMGFXOXVJbjAuRzlZUGVIOTF6RmxZSFhZV2FwNUFRdS1aSkR2bmpBN3puai1jaVozSmhkWSI=
sInAiOjE5NjkzMzY3MCwicyI6ODE3MTMyLCJmIjp0cnVlLCJ1IjoyNzM2MjIzOTgsImlhdCI6MT=
c3ODUxNDE5MCwiZXhwIjoyMDk0MDkwMTkwLCJpc3MiOiJwdWItMCIsInN1YiI6ImxpbmstcmVka=
XJlY3QifQ.T6or2FTUkAZiu_ZybNmxxrpyEpWicD2RhKH49aMv9wQ?&utm_source=3Dsubstac=
k&utm_medium=3Demail" style=3D"font-family: system-ui,-apple-system,BlinkMa=
cSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji=
','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;font-weight: 500=
;border: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-transform: uppe=
rcase;font-size: 12px;line-height: 12px;padding: 9px 14px;text-decoration: =
none;color: rgb(119,119,119);"><img class=3D"icon" src=3D"https://substackc=
dn.com/image/fetch/$s_!ubXF!,w_36,c_scale,f_png,q_auto:good,fl_progressive:=
steep/https%3A%2F%2Fsubstack.com%2Ficon%2Fnotes__NoteRestackIcon%3Fv%3D4%26=
height%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2%26stroke=
Linecap%3Dround%26strokeLinejoin%3Dround" width=3D"18" height=3D"18" alt=3D=
"" style=3D"margin-right: 8px;min-width: 18px;min-height: 18px;max-width: 5=
50px;border: none !important;vertical-align: middle;"><span class=3D"email-=
button-text" style=3D"vertical-align: middle;">Restack</span></a></td></tr>=
</tbody></table></td></tr></tbody></table></td><td align=3D"right"><table r=
ole=3D"presentation" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpadd=
ing=3D"0"><tbody><tr></tr></tbody></table></td></tr></tbody></table></td></=
tr><tr height=3D"16"><td height=3D"16" style=3D"font-size:0px;line-height:0=
;">&nbsp;</td></tr></tbody></table><div class=3D"footer footer-ZM59BM" styl=
e=3D"color: rgb(119,119,119);text-align: center;font-size: 16px;line-height=
: 26px;padding: 24px0;"><div style=3D"font-size: 16px;line-height: 26px;pad=
ding-bottom: 24px"><p class=3D"pencraft pc-reset color-secondary-ls1g8s siz=
e-12-mmZ61m reset-IxiVJZ small meta-B2bqa5" style=3D"list-style: none;font-=
family: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvet=
ica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol'=
;padding-bottom: 0;font-size: 12px;line-height: 16px;margin: 0;color: rgb(1=
19,119,119);text-decoration: unset;">&#169; 2026 <span>ByteByteGo</span><br=
>548 Market Street PMB 72296, San Francisco, CA 94104 <br><a href=3D"https:=
//substack.com/redirect/2/eyJlIjoiaHR0cHM6Ly9ibG9nLmJ5dGVieXRlZ28uY29tL2Fjd=
Glvbi9kaXNhYmxlX2VtYWlsP3Rva2VuPWV5SjFjMlZ5WDJsa0lqb3lOek0yTWpJek9UZ3NJbkJ2=
YzNSZmFXUWlPakU1Tmprek16WTNNQ3dpYVdGMElqb3hOemM0TlRFME1Ua3dMQ0psZUhBaU9qRTR=
NVEF3TlRBeE9UQXNJbWx6Y3lJNkluQjFZaTA0TVRjeE16SWlMQ0p6ZFdJaU9pSmthWE5oWW14bF=
gyVnRZV2xzSW4wLjVGcTBWUW1WSGJwbmxVOWhFQkhwX2xqbno2blJ6djczU1N2S3M3cGp3OEUiL=
CJwIjoxOTY5MzM2NzAsInMiOjgxNzEzMiwiZiI6dHJ1ZSwidSI6MjczNjIyMzk4LCJpYXQiOjE3=
Nzg1MTQxOTAsImV4cCI6MjA5NDA5MDE5MCwiaXNzIjoicHViLTAiLCJzdWIiOiJsaW5rLXJlZGl=
yZWN0In0.22vKqP1CqIoxnNlh92EuhM03JMsqTc9Qo-QlHWveOps?" style=3D"color: #775=
6e3;text-decoration: none;"><span style=3D"color: rgb(119,119,119);text-dec=
oration: underline;">Unsubscribe</span></a></p></div><p class=3D"footerSect=
ion-EHR0jG small powered-by-substack" style=3D"padding: 0 24px;font-size: 1=
2px;line-height: 20px;margin: 0;color: rgb(119,119,119);font-family: system=
-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans=
-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';padding-botto=
m: 0;margin-top: 0;"><a href=3D"https://substack.com/redirect/2/eyJlIjoiaHR=
0cHM6Ly9zdWJzdGFjay5jb20vc2lnbnVwP3V0bV9zb3VyY2U9c3Vic3RhY2smdXRtX21lZGl1bT=
1lbWFpbCZ1dG1fY29udGVudD1mb290ZXImdXRtX2NhbXBhaWduPWF1dG9maWxsZWQtZm9vdGVyJ=
mZyZWVTaWdudXBFbWFpbD10anBodWhzQGdtYWlsLmNvbSZyPTRpd29lNiIsInAiOjE5NjkzMzY3=
MCwicyI6ODE3MTMyLCJmIjp0cnVlLCJ1IjoyNzM2MjIzOTgsImlhdCI6MTc3ODUxNDE5MCwiZXh=
wIjoyMDk0MDkwMTkwLCJpc3MiOiJwdWItMCIsInN1YiI6ImxpbmstcmVkaXJlY3QifQ.YrRZWy2=
IrVnQP6hw6cUjXzk1RHeBDHl4HKOUBrWmIpU?" style=3D"color: #7756e3;text-decorat=
ion: none;display: inline-block;margin: 0 4px;"><img src=3D"https://substac=
kcdn.com/image/fetch/$s_!LkrL!,w_270,c_limit,f_auto,q_auto:good,fl_progress=
ive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Femail%2Fpublish-button%402x.pn=
g" srcset=3D"https://substackcdn.com/image/fetch/$s_!wgfj!,w_135,c_limit,f_=
auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Fem=
ail%2Fpublish-button.png, https://substackcdn.com/image/fetch/$s_!LkrL!,w_2=
70,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.c=
om%2Fimg%2Femail%2Fpublish-button%402x.png 2x, https://substackcdn.com/imag=
e/fetch/$s_!KjtY!,w_405,c_limit,f_auto,q_auto:good,fl_progressive:steep/htt=
ps%3A%2F%2Fsubstack.com%2Fimg%2Femail%2Fpublish-button%403x.png 3x" width=
=3D"135" alt=3D"Start writing" height=3D"40" style=3D"max-width: 550px;bord=
er: none !important;vertical-align: middle;"></a></p></div></div></td><td><=
/td></tr></tbody></table><img src=3D"https://eotrx.substackcdn.com/o/31814f=
8c7d35f378/p.gif?token=3DeyJtIjoiPDIwMjYwNTExMTUzMTE3LjMuODBjNGJiMWUyYWVjNm=
JlMUBtZy1kMC5zdWJzdGFjay5jb20-IiwidSI6MjczNjIyMzk4LCJyIjoidGpwaHVoc0BnbWFpb=
C5jb20iLCJkIjoibWctZDAuc3Vic3RhY2suY29tIiwicCI6MTk2OTMzNjcwLCJ0IjoibmV3c2xl=
dHRlciIsImEiOiJldmVyeW9uZSIsInMiOjgxNzEzMiwiYyI6InBvc3QiLCJmIjp0cnVlLCJwb3N=
pdGlvbiI6ImJvdHRvbSIsImlhdCI6MTc3ODUxNDE5MCwiZXhwIjoxNzgxMTA2MTkwLCJpc3MiOi=
JwdWItMCIsInN1YiI6ImVvIn0.VftQ49_84t-iXfM2fiPguhT893KckhtwOwpkdRXkQe0" alt=
=3D"" width=3D"1" height=3D"1" border=3D"0" style=3D"height:1px !important;=
width:1px !important;border-width:0 !important;margin-top:0 !important;marg=
in-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;p=
adding-top:0 !important;padding-bottom:0 !important;padding-right:0 !import=
ant;padding-left:0 !important;"/><img width=3D"1" height=3D"1" alt=3D"" src=
=3D"https://email.mg-d0.substack.com/o/eJxMkE1uwyAQRk8TdrX4scEsOIs1wMShtcGC=
IZVvXznJoovZvJGenr4AhGuppztKIxadVnCfIkMnjJknMQrLGe6QtmXFjBUI4wL07zvOhj1cGO8=
SePSj4hK0CRFtmFCBktpYbSxLTnKp-SSEmJQQZlDDzMPovUAJGLRHcRv5vn5FPrTuG0H4GULZWW=
rLveIrwVHtyK7QBXpMmAM6fGI9S_7gFJ2w2iqlDX8TOg90GX_bhkRY2dH9Esq-95zoXDCD3zB-x=
N1vKQClki_RLIxQklVH38ejP9pt5OtV8apq3ceyQ8rOn4TXrYXRe8TesF4CaZSWUtmZPZ38CwAA=
__8HH3er"></body></html>
--2fa2c826e187cd8406eadf45e5d0a540ddf45ce63ed0ce7467f1c130a6ae--
