<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet title="XSL_formatting" type="text/xsl" href="https://developer.salesforce.com/blogs/wp-content/themes/dfctheme/includes/feed_styles.xsl" ?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:podcast="https://podcastindex.org/namespace/1.0"
xmlns:rawvoice="https://blubrry.com/developer/rawvoice-rss/"
xmlns:media="http://search.yahoo.com/mrss/"
	xmlns:dscblog="https://developer.salesforce.com/blog/dscblog/"
>


<channel>
	<title>Salesforce Developers Blog</title>
	<atom:link href="https://developer.salesforce.com/blogs/feed" rel="self" type="application/rss+xml" />
	<link>https://developer.salesforce.com/blogs</link>
	<description>Elevating developer skills and connecting with the Salesforce Developers community</description>
	<lastBuildDate>Fri, 01 May 2026 21:54:34 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<atom:link rel="hub" href="https://pubsubhubbub.appspot.com/" />
	<itunes:author>Salesforce Developers Blog</itunes:author>
	<itunes:explicit>false</itunes:explicit>
	<itunes:image href="https://developer.salesforce.com/blogs/wp-content/plugins/powerpress/itunes_default.jpg" />
	<itunes:owner>
		<itunes:name>Salesforce Developers Blog</itunes:name>
	</itunes:owner>
	<podcast:medium>podcast</podcast:medium>
	<image>
		<title>Salesforce Developers Blog</title>
		<url>https://developer.salesforce.com/blogs/wp-content/plugins/powerpress/rss_default.jpg</url>
		<link>https://developer.salesforce.com/blogs</link>
	</image>
	<podcast:podping usesPodping="true" />
<site xmlns="com-wordpress:feed-additions:1">244780846</site>	<item>
		<title>The Dreamforce 2026 Call for Participation Is Now Open</title>
		<link>https://developer.salesforce.com/blogs/2026/04/the-dreamforce-2026-call-for-participation-is-now-open</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/the-dreamforce-2026-call-for-participation-is-now-open#respond</comments>
		<pubDate>Wed, 29 Apr 2026 17:30:08 +0000</pubDate>
		<dc:creator><![CDATA[Christie Fidura]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Developer Community]]></category>
		<category><![CDATA[Professional Development]]></category>
		<category><![CDATA[Salesforce Events]]></category>
		<category><![CDATA[Call for participation]]></category>
		<category><![CDATA[Dreamforce]]></category>
		<category><![CDATA[salesforce developers]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206206</guid>
		<description><![CDATA[<p>The Dreamforce 2026 Call for Participation is now open. Submit your session proposal by May 27, 2026 and share your developer expertise with the world's most engaged technical audience.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/the-dreamforce-2026-call-for-participation-is-now-open">The Dreamforce 2026 Call for Participation Is Now Open</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a href="https://www.salesforce.com/dreamforce/?d=701ed00000p9KZbAAM&amp;utm_content=701ed00000p9KZbAAM&amp;utm_source=google&amp;utm_medium=paid_search&amp;utm_campaign=23626787453&amp;utm_adgroup=194012598436&amp;utm_term=dreamforce%202026&amp;utm_matchtype=e&amp;gclsrc=aw.ds&amp;gad_source=1&amp;gad_campaignid=23626787453&amp;gbraid=0AAAAAD4PnrOYEryZOfeHAhkZ1e6kVjD3X&amp;gclid=CjwKCAjwtcHPBhADEiwAWo3sJto8F8PGiWK8rPLcmtyVYeIAb4OTdx_EFXxDHm_uuthMwUwUia-HDBoCBq8QAvD_BwE"><span style="font-weight: 400">Dreamforce</span></a><span style="font-weight: 400"> returns to San Francisco, September 15–17, 2026, bringing together the global Salesforce community to experience the Agentic Enterprise through 1,600+ sessions, expert-led training, visionary keynotes, and hands-on learning.</span></p>
<p><span style="font-weight: 400">This is where developers get a front-row view of the latest AI innovations, product launches, and breakthrough ideas. You’ll gain the skills to build smarter apps and agents, while connecting with a global community shaping the future of Salesforce development.</span></p>
<p><span style="font-weight: 400">Each year, we invite the Salesforce Developer community to take the stage. Whether you’re a first-time Dreamforce speaker or a seasoned pro, this is your opportunity to share your expertise, best practices, and real-world insights with thousands of the highly engaged developers and technical leaders. </span></p>
<p><span style="font-weight: 400">The Dreamforce 2026 </span><a href="https://reg.salesforce.com/flow/plus/df26/df26sessionproposal/cfpHome"><span style="font-weight: 400">Call for Participation</span></a><span style="font-weight: 400"> is now officially open. If you have a great idea for a session, be sure to follow the guidelines outlined below and </span><a href="https://reg.salesforce.com/flow/plus/df26/df26sessionproposal/cfpHome"><span style="font-weight: 400">complete the submission process</span></a><span style="font-weight: 400"> by </span><b>5 p.m. PT on May 27, 2026.</b></p>
<h2>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206212" >
			    <img fetchpriority="high" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260430093743/DF26-CFP-Slide-e1777567153692.png?w=1000" class="postimages" width="1000" height="563" alt="Dreamforce 2026 announcement image featuring details for the Call for Participation, open until May 27th." />
			  </span>
			</h2>
<h2><span style="font-weight: 400">Why submit a Dreamforce proposal?</span></h2>
<p><span style="font-weight: 400">Presenting at Dreamforce is about inspiring others, sharing your knowledge and expertise, and helping to build a strong and collaborative community of Salesforce professionals. The developer track is seeking compelling, high-quality session proposals that educate by showcasing expertise through technical deep dives, real-world implementations, and innovative solutions that help attendees learn new skills and drive business outcomes. </span></p>
<h2><span style="font-weight: 400">Explore topics for your session</span></h2>
<p><span style="font-weight: 400">The strongest proposals tell a clear, compelling story: the challenge you faced, the solution you built, and what you learned along the way. To craft a standout submission, consider highlighting one or more of the following:</span></p>
<ul>
<li style="font-weight: 400"><b>Technical deep dives</b><span style="font-weight: 400"> that showcase your expertise &#8211; whether it’s a specific feature, a solution you’ve built, or a topic you’re passionate about, grounded in real experience</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">The </span><b>latest Salesforce innovations</b><span style="font-weight: 400">, including hands-on experience with new or upcoming features</span></li>
<li style="font-weight: 400"><b>Pilot or beta experiences</b><span style="font-weight: 400"> that offer early insights into what’s next</span></li>
<li style="font-weight: 400"><b>Solutions built with Salesforce technologies </b><span style="font-weight: 400">such as Agentforce, Data 360, Apex, Lightning Web Components, Model Context Protocol (MCP), vibe coding, and more</span></li>
</ul>
<p><b>Cross-cloud use cases </b><span style="font-weight: 400">that span multiple Salesforce products &#8211; for example, integrations between core Platform and Slack</span></p>
<h2><span style="font-weight: 400">Choose a session format</span></h2>
<p><span style="font-weight: 400">For inclusion into the Developer track, you can choose from the following session formats:</span></p>
<ul>
<li style="font-weight: 400"><b>Breakout Sessions (40 minutes):</b><span style="font-weight: 400"> These sessions are held in dedicated rooms with larger audience capacity, giving presenters ample time to deep dive into their topic and take live questions. We recommend 32 minutes for presentation delivery and 5-7 minutes for questions and discussion. Up to three presenters may deliver a breakout.</span></li>
<li style="font-weight: 400"><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Theater Sessions (20 minutes):</b><span style="font-weight: 400"> Fast, focused, and built for impact. Conducted on the show floor in open theaters without formal Q&amp;A, with presenters encouraged to continue the conversation with attendees after their session. Maximum of two presenters.</span></li>
</ul>
<h2><span style="font-weight: 400">Submit your proposal </span></h2>
<p><span style="font-weight: 400">Submitting a Dreamforce session proposal is a straightforward process. Here are some guidelines for filling out the submission form:</span></p>
<ul>
<li style="font-weight: 400"><b>Review the Call for Participation form before starting.</b><span style="font-weight: 400"> Every detail you include helps the technical review team evaluate your session’s potential. We’re looking for clear storytelling, real-world relevance, and actionable takeaways, so be sure to outline the challenge, your solution, and the technical insights your audience will walk away with.</span></li>
<li style="font-weight: 400"><b>Craft an authentic and meaningful title and abstract.</b>
<ul>
<li style="font-weight: 400"><i><span style="font-weight: 400">Title (60 characters max):</span></i><span style="font-weight: 400"> Make it very clear to attendees what they&#8217;ll learn. Tip: Start with a verb and include the name of the product or technology. Example: &#8220;Using Parallel Subscriptions to Help with Your Agents&#8221;</span></li>
<li style="font-weight: 400"><i><span style="font-weight: 400">Abstract (200 characters max): Dive deeper into what your session will cover. Accuracy and clarity are more important than creative writing. Be careful with AI-generated content, which can feel inauthentic and impersonal.</span></i></li>
</ul>
</li>
<li><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Make sure you can attend Dreamforce 2026 if your session is accepted. </b><span style="font-weight: 400">Note that we do not provide travel or accommodation for presenters.</span></li>
</ul>
<h2><span style="font-weight: 400">Access speaker support and resources</span></h2>
<p><span style="font-weight: 400">If your session is accepted, you’ll receive an email confirmation by the end of June 2026, and you and any co-presenters will be asked to confirm your participation via our Content Portal. All presenters receive a complimentary speaker pass to Dreamforce 2026. If you&#8217;ve already purchased a pass, you&#8217;ll receive instructions on how to request a refund or transfer it to someone else.</span></p>
<p><span style="font-weight: 400">We’ll guide you through the session preparation process, which includes coaching you to prepare your content, reviewing your presentation slides, and rehearsing your session. </span></p>
<p><span style="font-weight: 400">Not accepted? Don&#8217;t be discouraged. The process is competitive and reflects session balance, audience needs, and event themes, not the quality of your idea. Consider sharing your expertise at </span><a href="https://trailhead.salesforce.com/community/conferences/?_ga=2.20725624.1177069369.1777398590-1895912214.1767637500"><span style="font-weight: 400">Trailblazer Community conferences</span></a><span style="font-weight: 400"> or </span><a href="https://trailblazercommunitygroups.com/"><span style="font-weight: 400">Trailblazer Community group meetups</span></a><span style="font-weight: 400">.</span></p>
<h2><span style="font-weight: 400">Important dates to remember</span></h2>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">April 29, 2026: Call for Participation opens</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">May 27, 2026, 5 p.m. PT: Submission deadline</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">End of June 2026: Proposal status notifications sent</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">September 15–17, 2026: Dreamforce 2026, San Francisco</span></li>
</ul>
<h2><span style="font-weight: 400">Begin your submission now</span></h2>
<p><a href="https://reg.salesforce.com/flow/plus/df26/df26sessionproposal/cfpHome"><span style="font-weight: 400">Submit your proposal</span></a><span style="font-weight: 400"> by </span><b>Wednesday, May 27, 2026 at 5 p.m. PT</b><span style="font-weight: 400">. We look forward to seeing your ideas.</span></p>
<h2><span style="font-weight: 400">About the author</span></h2>
<p><b>Christie Fidura</b><span style="font-weight: 400"> is responsible for Global Developer Programs at Salesforce. You can follow her on </span><a href="https://bsky.app/profile/cfidurauk.bsky.social"><span style="font-weight: 400">BlueSky</span></a><span style="font-weight: 400"> or </span><a href="https://www.linkedin.com/in/christiefidura/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/the-dreamforce-2026-call-for-participation-is-now-open">The Dreamforce 2026 Call for Participation Is Now Open</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/the-dreamforce-2026-call-for-participation-is-now-open/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206206</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260429100710/429-The-Dreamforce-2026-Call-for-Participation-Is-Now-Open-e1777482444475.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260429100710/429-The-Dreamforce-2026-Call-for-Participation-Is-Now-Open-e1777482444475.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Salesforce Hosted MCP Servers Are Now Generally Available</title>
		<link>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-servers-are-now-generally-available</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-servers-are-now-generally-available#respond</comments>
		<pubDate>Wed, 29 Apr 2026 13:00:30 +0000</pubDate>
		<dc:creator><![CDATA[Ross Belmont]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[APIs and Integrations]]></category>
		<category><![CDATA[Data Cloud]]></category>
		<category><![CDATA[Trust, Security, and Accessibility]]></category>
		<category><![CDATA[Agentic Workflow]]></category>
		<category><![CDATA[AI Security]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Generative AI]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Model context protocol]]></category>
		<category><![CDATA[Salesforce Integration]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206202</guid>
		<description><![CDATA[<p>Salesforce Hosted MCP Servers are now generally available (GA), enabling AI agents to securely access your Salesforce data across every Enterprise Edition org and above.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-servers-are-now-generally-available">Salesforce Hosted MCP Servers Are Now Generally Available</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">Parker Harris said it himself: “</span><a href="https://www.salesforce.com/news/stories/salesforce-headless-360-announcement/"><span style="font-weight: 400">Why should you ever log into Salesforce again?</span></a><span style="font-weight: 400">”</span></p>
<p><span style="font-weight: 400">This is where the enterprise interface is heading; the AI revolution is here. Today, Salesforce hosted MCP servers are generally available — and they’re the infrastructure that enables that for your organization.</span></p>
<p><span style="font-weight: 400">What started as a pilot last spring and beta last October — connecting AI assistants to Salesforce logic and assets through the </span><a href="https://modelcontextprotocol.io"><span style="font-weight: 400">Model Context Protocol</span></a><span style="font-weight: 400"> (MCP) — is now a production-ready capability for every Enterprise Edition org and above. Any MCP-compatible client can securely connect to Salesforce with enterprise-grade authentication, governance, and admin control built in.</span></p>
<p><span style="font-weight: 400">A hosted MCP server is a Salesforce-managed endpoint that exposes your org’s logic and assets — data, flows, Apex actions, queries, and more — to any AI client that speaks MCP. Salesforce handles hosting, authentication, and permission enforcement automatically. Whether your users live in Slack, Claude, ChatGPT, or something else entirely, MCP means they can work with Salesforce without switching contexts. All the major AI platforms and workplace communication solutions are building on MCP as the standard way to connect AI agents to enterprise systems. We now have an open standard for the industry to converge upon, and Salesforce is enthusiastically embracing the shift.</span></p>
<h2><b>What’s in the GA</b></h2>
<p><span style="font-weight: 400">If you read </span><a href="https://developer.salesforce.com/blogs/2025/10/salesforce-hosted-mcp-servers-are-in-beta-today"><span style="font-weight: 400">the beta announcement</span></a><span style="font-weight: 400">, you saw the vision. For the GA, we’re highlighting the following:</span></p>
<ul>
<li style="font-weight: 400"><b>Fully managed infrastructure.</b><span style="font-weight: 400"> Salesforce hosts and scales your MCP servers, just as it does for the REST APIs you already use. No servers to provision, no uptime to manage. Enable a server in Setup and you’re live.</span></li>
<li style="font-weight: 400"><b>Platform security built in.</b><span style="font-weight: 400"> Your existing permissions automatically apply — CRUD, </span><a href="https://help.salesforce.com/s/articleView?id=platform.users_profiles_field_perms.htm&amp;type=5"><span style="font-weight: 400">FLS</span></a><span style="font-weight: 400">, sharing rules, and all the other controls you’ve already mastered. Every transaction runs as the authenticated user, without anonymous service accounts or a new security model to learn. OAuth and </span><a href="https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_pkce.htm&amp;type=5"><span style="font-weight: 400">PKCE</span></a><span style="font-weight: 400"> control access.</span></li>
<li style="font-weight: 400"><b>Robust, extensible feature set.</b><span style="font-weight: 400"> Use prebuilt standard servers for the Agentforce 360 Platform, Tableau Next, Data 360 SQL, and more — or configure custom servers that expose your flows, Apex actions, and </span><a href="https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_named_query.htm"><span style="font-weight: 400">Named Query APIs</span></a><span style="font-weight: 400">.</span></li>
<li style="font-weight: 400"><b>Prompt templates.</b><span style="font-weight: 400"> Craft prebuilt starting points for common tasks like account reviews or deal analysis in natural language to guide AI toward useful outputs grounded in your org’s data.</span></li>
</ul>
<p><span style="font-weight: 400">And soon, you’ll be able to open up even more possibilities by invoking Agentforce agents via MCP.</span></p>
<h2><b>Real-world use cases and impact</b></h2>
<p><span style="font-weight: 400">We received great customer feedback during the pilot and beta periods regarding use cases for the MCP server:</span></p>
<p><b>Sales reps who never leave their AI assistant.</b><span style="font-weight: 400"> A rep preparing for a quarterly business review asks their chatbot to pull the account history, open opportunities, recent case activity, and stakeholder map — all from Salesforce, all in one conversation. No tab-switching, SOQL, or reports to build. The CRM data comes to them.</span></p>
<p><b>Cross-system intelligence.</b><span style="font-weight: 400"> A financial services company connects their AI assistant to Salesforce alongside their ERP system. The assistant reconciles quarterly revenue by comparing closed-won opportunities against general ledger entries, all with production data and enterprise-grade security.</span></p>
<p><b>Custom tools for domain-specific workflows.</b><span style="font-weight: 400"> ISV partners can build custom MCP tools backed by Apex invocable actions, Apex REST, and more. This gives our mutual customers’ AI assistants the ability to interact with their industry-specific data model through natural language, without the end user needing to understand the underlying schema.</span></p>
<h2><b>Human at the wheel</b></h2>
<p><span style="font-weight: 400">In the beta announcement, we characterized MCP as a universal translator between AI agents and your business data. Though that’s accurate, it undersells the importance of enabling </span><b>secure</b><span style="font-weight: 400"> access to data and actions </span><b>under human control</b><span style="font-weight: 400">.</span></p>
<p><span style="font-weight: 400">Every MCP transaction runs with the authenticated user’s identity, permissions, and accountability. If the agent updates a record, that person’s name appears in the audit trail. If their permissions don’t allow an operation, the agent can’t do it either. The human is in the driver’s seat.</span></p>
<p><span style="font-weight: 400">Steve Jobs called the personal computer “</span><a href="https://www.youtube.com/watch?v=ob_GX50Za6c&amp;t=24s"><span style="font-weight: 400">a bicycle for the mind</span></a><span style="font-weight: 400">” — a tool that amplified human capability beyond what was possible working by hand. With MCP and today&#8217;s AI assistants, we&#8217;ve moved past the bicycle. If personal computers were human-powered, now we’ve attached an engine, but the human is still at the wheel. A sales rep preparing for a meeting doesn’t log into Salesforce, navigate to the account, click through related records, and build a briefing by hand. They ask their AI assistant — in whatever tool they’re already working in — and get a comprehensive account review grounded in live customer data.</span></p>
<p><span style="font-weight: 400">The pace of business increases every day, and MCP helps your team keep up.</span></p>
<h2><b>Safety comes faster this time</b></h2>
<p><span style="font-weight: 400">It took more than 50 years for seat belt mandates in automobiles. In AI, safety controls are evolving in months, not decades.</span></p>
<p><span style="font-weight: 400">MCP itself is a safety mechanism. Structured tool calls replace unstructured API access. The server defines exactly which operations are available; there’s no way for an AI assistant to call an API that hasn’t been explicitly exposed. A new OAuth scope provides access to MCP, but not our existing REST APIs. Salesforce adds further layers: the platform’s decades-proven permission model, full audit trails, and the secure-by-default posture requiring MCP servers to be specifically enabled.</span></p>
<p><span style="font-weight: 400">Salesforce has always had strong access controls, but that’s not true of every enterprise system. A new category of products is emerging to help manage this on an enterprise-wide basis: MCP gateways — similar to API gateways, but purpose-built for the protocol. Products like </span><a href="https://www.mulesoft.com/platform/ai-gateway"><span style="font-weight: 400">MuleSoft AI Gateway</span></a><span style="font-weight: 400"> provide centralized governance across all your MCP servers, not just Salesforce. Enterprises deploying MCP across multiple vendors will want to explore MCP gateways for centralized access control.</span></p>
<h2><b>Getting started</b></h2>
<p><span style="font-weight: 400">The setup takes less than 30 minutes. Here’s the shortest path:</span></p>
<ol>
<li style="font-weight: 400"><b>Enable a server</b><span style="font-weight: 400"> in Setup → API Catalog → MCP Servers</span></li>
<li style="font-weight: 400"><b>Create an External Client App</b><span style="font-weight: 400"> with </span><span style="font-weight: 400"><code><span>mcp_api</span></code> </span><span style="font-weight: 400">and </span><span style="font-weight: 400"><code><span>refresh_token</span></code></span><span style="font-weight: 400"> scopes</span></li>
<li style="font-weight: 400"><b>Connect your client</b><span style="font-weight: 400"> — Postman for testing, then Claude, ChatGPT, or similar for everyday use</span></li>
</ol>
<p><span style="font-weight: 400">Documentation is grouped into three layers to match the needs of various roles:</span></p>
<ul>
<li style="font-weight: 400"><a href="https://help.salesforce.com/s/articleView?id=platform.api_catalog_manage_mcp_servers.htm"><b>Salesforce Help</b></a><span style="font-weight: 400"> — Admin setup and configuration</span></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers"><b>Developer Docs</b></a><span style="font-weight: 400"> — </span><a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers/references/reference/references-overview.html"><span style="font-weight: 400">Technical reference</span></a><span style="font-weight: 400">, </span><a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/client-connection-overview.html"><span style="font-weight: 400">client setup</span></a><span style="font-weight: 400">, and </span><a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/troubleshooting-overview.html"><span style="font-weight: 400">troubleshooting</span></a></li>
<li style="font-weight: 400"><a href="https://github.com/forcedotcom/mcp-hosted/wiki"><b>Community Wiki</b></a><span style="font-weight: 400"> — Patterns, tips, and the rationale behind our design decisions</span></li>
</ul>
<p><span style="font-weight: 400">If you’re not sure where to begin, try the </span><a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers/references/reference/sobject-reads.html"><span style="font-weight: 400">platform/sobject-reads</span></a><span style="font-weight: 400"> server in a sandbox. It&#8217;s read-only, risk-free, and immediately useful. When you’re ready for more, you can choose or build the exact tool set your organization needs.</span></p>
<h2><b>A new chapter</b></h2>
<p><span style="font-weight: 400">When we launched the beta, we imagined a world where every department could access CRM data through natural language. This year at TDX I presented on how our hosted MCP server brings this to life for Salesforce customers. You can now watch this TDX session on Salesforce+: </span><a href="https://www.salesforce.com/plus/experience/tdx_2026/series/developers_at_tdx_2026/episode/episode-s1e2"><span style="font-weight: 400">Master Agentic Integration with Salesforce MCP Servers</span></a></p>
<p><span style="font-weight: 400">CRM is a capability, not a destination. We’re just getting started.</span></p>
<h2><b>About the author</b></h2>
<p><b>Ross Belmont</b><span style="font-weight: 400"> is a Senior Director of Product Management focused on integrations, with more than 15 years of experience in the Salesforce ecosystem.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-servers-are-now-generally-available">Salesforce Hosted MCP Servers Are Now Generally Available</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-servers-are-now-generally-available/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206202</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260428145742/429-Salesforce-Hosted-MCP-Servers-Are-Now-Generally-Available-e1777413477642.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260428145742/429-Salesforce-Hosted-MCP-Servers-Are-Now-Generally-Available-e1777413477642.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Introducing the B2C Commerce CLI and On-Demand Sandbox Cloning</title>
		<link>https://developer.salesforce.com/blogs/2026/04/introducing-the-b2c-commerce-cli-and-on-demand-sandbox-cloning</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/introducing-the-b2c-commerce-cli-and-on-demand-sandbox-cloning#respond</comments>
		<pubDate>Tue, 28 Apr 2026 15:00:06 +0000</pubDate>
		<dc:creator><![CDATA[Charles Lavery]]></dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[B2C Commerce CLI]]></category>
		<category><![CDATA[developer tooling]]></category>
		<category><![CDATA[Sandbox Cloning]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206193</guid>
		<description><![CDATA[<p>Accelerate B2C Commerce development with a new unified CLI, On-Demand Sandbox Cloning, and AI-powered agent skills.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/introducing-the-b2c-commerce-cli-and-on-demand-sandbox-cloning">Introducing the B2C Commerce CLI and On-Demand Sandbox Cloning</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">B2C Commerce developers juggle multiple code deployments, sandbox provisioning, content delivery network (CDN) configuration, Managed Runtime bundles, and more — often across multiple portals and ad hoc scripts. Setting up new environments has historically been slow and error-prone.</span></p>
<p><span style="font-weight: 400">Today, we&#8217;re announcing two </span><span style="font-weight: 400">tools</span><span style="font-weight: 400"> that change this. </span><b>B2C Developer Tooling</b><span style="font-weight: 400"> i</span><span style="font-weight: 400">s an open-source project that|includes a command-line interface (CLI) and a software development kit</span><span style="font-weight: 400"> (SDK) for the entire B2C platform. </span><b>On-demand sandbox cloning</b><span style="font-weight: 400"> is a new platform capability that lets you create exact replicas of existing sandboxes in minutes. This post covers what the tooling includes, how sandbox cloning works, and how you can get started today.</span></p>
<h2><span style="font-weight: 400">B2C Developer Tooling: A single CLI for the entire platform</span></h2>
<p>B2C Developer Tooling is an open-source, Apache 2.0–licensed, Salesforce-supported set of packages purpose-built for B2C Commerce developers and admins. We publish three Node.js packages: the CLI (<code>@salesforce/b2c-cli</code>), a reusable SDK (<code>@salesforce/b2c-tooling-sdk</code>), and agent skills for AI-assisted development.</p>
<p>The CLI is built on <a href="https://oclif.io/"><u>oclif</u></a> — the same framework behind the Salesforce <code>sf</code> CLI and Heroku CLI — and provides <b>200+ commands across 20+ topic areas</b>. That includes code deployment, sandbox management, Managed Runtime, embedded CDN (eCDN) configuration, Shopper Login and API Access Service (SLAS), Custom Salesforce Commerce API (SCAPI) endpoints, Account Manager administration, and more. Whether you&#8217;re pushing cartridges with <code>b2c code deploy</code>, tailing Managed Runtime (MRT) logs, or configuring Web Application Firewall (WAF) rules on your eCDN zone — we&#8217;ve consolidated it into one tool.</p>
<p><span style="font-weight: 400">The source code lives on GitHub at the </span><a href="https://github.com/SalesforceCommerceCloud/b2c-developer-tooling"><span style="font-weight: 400">B2C Developer Tooling repository</span></a><span style="font-weight: 400">.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206194" >
			    <img decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260427151006/image3-e1777327820527.png?w=1000" class="postimages" width="1000" height="745" alt="Terminal output showing the b2c sandbox clone create command creating a new sandbox clone with progress updates and a completion message." />
			  </span>
			</p>
<h3><span style="font-weight: 400">Built for the modern platform</span></h3>
<p><span style="font-weight: 400">We built the tooling </span><b>SCAPI-first</b><span style="font-weight: 400">, using </span><a href="https://developer.salesforce.com/docs/commerce/commerce-api/references/about-commerce-api/about.html"><span style="font-weight: 400">Salesforce Commerce APIs</span></a><span style="font-weight: 400"> wherever available and falling back to the </span><a href="https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-commerce-ocapi/get-started-with-ocapi.html"><span style="font-weight: 400">Open Commerce API</span></a><span style="font-weight: 400"> (OCAPI) only where needed. Authentication is zero-config for most commands — a built-in public OAuth client and browser-based login flow means you can start working without creating API credentials.</span></p>
<p>For continuous integration (CI) and automation, the CLI is backwards-compatible with <code>sfcc-ci</code> conventions and environment variables, so you can adopt it alongside your existing setup. If you use <code>sfcc-ci</code>, consider updating your CI/continuous delivery (CD) systems to stay up-to-date with the latest platform changes and deprecations. Structured logging with automatic redaction of secrets keeps your pipelines clean and your credentials safe.</p>
<h3><span style="font-weight: 400">Developer velocity</span></h3>
<p>We designed the CLI to keep you moving. Generate new cartridges, controllers, hooks, custom APIs, job steps, and Page Designer components from built-in scaffolds with <code>b2c scaffold generate</code>. Pull instance logs directly from the command line with <code>b2c logs get</code> — and filter by type, level, or time range without navigating WebDAV. For MRT storefronts, <code>b2c mrt tail-logs</code> streams environment logs in real time.</p>
<h3><span style="font-weight: 400">Official GitHub Actions</span></h3>
<p><span style="font-weight: 400">We provide official GitHub Actions for automating B2C Commerce operations in your CI/CD pipelines. High-level composite actions cover the most common workflows — code deployment, data import, MRT deployment, and job execution — while a raw command passthrough handles everything else. The actions manage CLI installation, credential configuration, and caching automatically. These are fully transparent composite actions defined in YAML, with no compiled JavaScript. See the </span><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/ci-cd.html"><span style="font-weight: 400">CI/CD guide</span></a><span style="font-weight: 400"> for details.</span></p>
<h2><span style="font-weight: 400">Spotlight: On-Demand Sandbox Cloning</span></h2>
<p><span style="font-weight: 400">Starting with the 26.3 release, we&#8217;re introducing </span><b>On-Demand Sandbox Cloning</b><span style="font-weight: 400"> — the ability to create exact replicas of existing sandboxes with the same data, configurations, and application code. This is a platform-level capability available through the Control Center UI and the B2C CLI from day one.</span></p>
<p><b>Why this matters:</b><span style="font-weight: 400"> environment setup that previously took hours of manual configuration can now be completed in minutes. Need a fresh environment for testing a release? Clone your staging sandbox. Want to reproduce a production issue safely? Clone the relevant environment and investigate in isolation. Each clone is fully independent, so changes in one never affect the other.</span></p>
<p><span style="font-weight: 400">Key benefits:</span></p>
<ul>
<li style="font-weight: 400"><b>~75% faster environment setup, based on internal testing comparing traditional import/export (data import, code deployment, site configuration) to a single clone command</b><span style="font-weight: 400"> </span></li>
<li style="font-weight: 400"><b>Exact replicas</b><span style="font-weight: 400"> — data, site configuration, and code version all carry over</span></li>
<li style="font-weight: 400"><b>Fully isolated</b><span style="font-weight: 400"> — each clone is an independent sandbox with its own lifecycle</span></li>
</ul>
<p><span style="font-weight: 400">All of this leads to faster, less error-prone test and development cycles.</span></p>
<p><span style="font-weight: 400">When using the cloning feature, you’ll likely still need to update certain </span><b>environment-specific </b><span style="font-weight: 400">configurations. Site preferences, aliases, hybrid SLAS configuration settings, and any instances of the tenant identifier of the environment are not automatically updated and should be set with a post-clone data import.</span></p>
<h3><span style="font-weight: 400">Cloning with the CLI</span></h3>
<p><span style="font-weight: 400">The CLI provides full support for creating and managing clones:</span></p>
<pre language="bash"># Create a clone and wait for it to complete
b2c sandbox clone create zzzv-123 --wait

# List all clones for a sandbox
b2c sandbox clone list zzzv-123

# Get detailed status of a specific clone
b2c sandbox clone get zzzv-123 aaaa-002-1642780893121
</pre>
<p>You can optionally specify a <code>--target-profile</code> (medium, large, xlarge, xxlarge) and <code>--ttl</code> to control the clone&#8217;s resource size and lifetime. The source sandbox is automatically stopped during cloning to ensure data integrity.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206197" >
			    <img decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260427151512/image1_84da81-e1777328129381.png?w=1000" class="postimages" width="1000" height="269" alt="Terminal output showing the b2c sandbox clone create command creating a new sandbox clone with progress updates and a completion message." />
			  </span>
			</p>
<h2><span style="font-weight: 400">Teach your coding agent B2C Commerce</span></h2>
<p><span style="font-weight: 400">B2C Developer Tooling includes two sets of agent skills designed for AI coding agents:</span></p>
<ul>
<li style="font-weight: 400"><b>b2c-cli</b><span style="font-weight: 400"> — 16 skills covering CLI operations like code deployment, sandbox management, MRT, and eCDN configuration. These teach your coding agent how to use the CLI on your behalf.</span></li>
<li style="font-weight: 400"><b>b2c</b><span style="font-weight: 400"> — 18 skills teaching B2C development patterns including controllers, hooks, Custom APIs, Page Designer components, forms, and more. These give your coding agent deep knowledge of B2C-specific architecture and best practices — not just CLI syntax.</span></li>
</ul>
<p>The skills work with Claude Code, Cursor, GitHub Copilot, VS Code, Windsurf, and any tool that supports the agent skills format. Install them from the <a href="https://agentskills.io/home"><u>Agent Skills marketplace</u></a>, through the Skills CLI, or by running <code>b2c setup skills</code>.</p>
<p>The CLI also includes a <b>safety mode</b> that prevents accidental destructive operations, which is particularly important when exposing the CLI as a tool to coding agents. You can set the safety level to <code>NO_DELETE</code>, <code>NO_UPDATE</code>, or <code>READ_ONLY</code> to control what operations are allowed.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206196" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260427151215/image2_586ab9-e1777327952994.png?w=1000" class="postimages" width="1000" height="308" alt="Claude Code responding to a B2C Commerce development prompt using the installed agent skills to provide context-aware guidance." />
			  </span>
			</p>
<h3><span style="font-weight: 400">Model Context Protocol (MCP) Server</span></h3>
<p>For deeper integration, we also ship an MCP server (<code>@salesforce/b2c-dx-mcp</code>) that gives coding agents direct access to platform tools. It includes tools for managing cartridges, working with MRT environments, and scaffolding Custom SCAPI endpoints. It also supports building <a href="https://github.com/SalesforceCommerceCloud/storefront-next-template/"><u>storefront-next</u></a> components with Figma-to-component generation, Page Designer decorators, and site theming. Connect it to any MCP-compatible coding agent for a richer development experience.</p>
<h2><span style="font-weight: 400">Extend with plugins and build with the SDK</span></h2>
<p><span style="font-weight: 400">The CLI supports an oclif-based plugin system for adding custom commands, and exposes hook points for integrating with external credential stores, modifying API requests, and customizing deployment workflows. Community plugins already exist for </span><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/third-party-plugins.html"><span style="font-weight: 400">IntelliJ configuration, Keychain credential storage, and more</span></a><span style="font-weight: 400">.</span></p>
<p>For custom integrations, the SDK (<code>@salesforce/b2c-tooling-sdk</code>) exposes all core functions as a reusable Node.js library — build your own tools on top of the same APIs that the CLI uses. The CLI also supports shell autocomplete for bash, zsh, fish, and PowerShell.</p>
<h2><span style="font-weight: 400">Conclusion</span></h2>
<p><span style="font-weight: 400">Between a unified CLI covering the full B2C platform and the ability to clone sandboxes in minutes, we&#8217;re making it significantly easier for you to develop, test, and ship on Commerce Cloud. Install the CLI today with npm, try cloning a sandbox, and let us know what you think. Your feedback directly shapes what we build next.</span></p>
<p>Node.js 22 or later is required. To install agent skills for your coding agent, run <code>b2c setup skills</code>. We welcome feedback and contributions through <a href="https://github.com/SalesforceCommerceCloud/b2c-developer-tooling"><u>GitHub Issues</u></a>.</p>
<h2><span style="font-weight: 400">Resources</span></h2>
<ul>
<li style="font-weight: 400"><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/"><span style="font-weight: 400">B2C Developer Tooling documentation</span></a></li>
<li style="font-weight: 400"><a href="https://github.com/SalesforceCommerceCloud/b2c-developer-tooling"><span style="font-weight: 400">B2C Developer Tooling on GitHub</span></a></li>
<li style="font-weight: 400"><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/agent-skills.html"><span style="font-weight: 400">Agent Skills guide</span></a></li>
<li style="font-weight: 400"><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/ci-cd.html"><span style="font-weight: 400">CI/CD with GitHub Actions</span></a></li>
<li style="font-weight: 400"><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/sfcc-ci-migration.html"><span style="font-weight: 400">sfcc-ci migration guide</span></a></li>
</ul>
<h2><b>About the author</b></h2>
<p><b>Charles Lavery</b><span style="font-weight: 400"> is a Principal Member of Technical Staff at Salesforce specializing in developer tooling and APIs.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/introducing-the-b2c-commerce-cli-and-on-demand-sandbox-cloning">Introducing the B2C Commerce CLI and On-Demand Sandbox Cloning</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/introducing-the-b2c-commerce-cli-and-on-demand-sandbox-cloning/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206193</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260427152014/428-Introducing-the-B2C-Commerce-CLI-and-On-Demand-Sandbox-Cloning-e1777328435613.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260427152014/428-Introducing-the-B2C-Commerce-CLI-and-On-Demand-Sandbox-Cloning-e1777328435613.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Salesforce Mult-Framework を使用した React による UI 開発</title>
		<link>https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp#respond</comments>
		<pubDate>Sat, 25 Apr 2026 08:14:24 +0000</pubDate>
		<dc:creator><![CDATA[Hiroyuki Inaba]]></dc:creator>
				<category><![CDATA[New Developments]]></category>
		<category><![CDATA[app development]]></category>
		<category><![CDATA[react]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206163</guid>
		<description><![CDATA[<p>TDX 2026&#12391;&#30330;&#34920;&#12373;&#12428;&#12383;Salesforce Multi-Framework&#65288;&#12505;&#12540;&#12479;&#29256;&#65289;&#12434;&#20351;&#12356;&#12289;React&#12391;Salesforce UI&#12434;&#38283;&#30330;&#12377;&#12427;&#25163;&#38918;&#12434;&#35299;&#35500;&#12290;Developer Edition&#12398;&#12473;&#12463;&#12521;&#12483;&#12481;&#32068;&#32340;&#12391;&#12471;&#12531;&#12503;&#12523;&#12394;UI &#12434;&#20316;&#25104;&#12375;&#12289;&#21462;&#24341;&#20808;&#12487;&#12540;&#12479;&#12434;&#34920;&#31034;&#12377;&#12427;&#12414;&#12391;&#12398;&#12473;&#12486;&#12483;&#12503;&#12434;&#20844;&#38283;&#12375;&#12414;&#12377;&#12290;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp">Salesforce Mult-Framework を使用した React による UI 開発</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>みなさん、こんにちは！ TDX 2026 では新機能「Salesforce Multi-Framework」が発表され、Salesforce の UI を React を使って開発することができるようになりました。</p>
<ul>
<li><a href="https://developer.salesforce.com/docs/platform/einstein-for-devs/guide/reactdev-overview.html">Agentforce Vibes Developer Guide: Build a React App with Salesforce Multi-Framework (Beta)</a></li>
</ul>
<p>注意: 2026年4月時点ではまだ Beta 版です。</p>
<p>この記事では、Developer Edition で作成したスクラッチ組織を使い、内部ユーザーが利用する想定のシンプルなアプリを作成する手順を紹介します。スクラッチ組織の作成方法については、かこのブログ記事「<a href="https://developer.salesforce.com/jpblogs/2025/12/jp-scratch-org-with-developer-edition">Developer Edition + スクラッチ組織で、複数の開発・検証組織を手にいれる</a>」をご参照ください。ログインして表示言語を日本語化した状態から進めていきます。</p>
<h2>事前準備</h2>
<p>まずは VS Code で新規に「Standard」で作成したプロジェクトを用意します。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206184" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012449/salesforce-multi-framework-react-jp-image1.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>React External App や React Internal App もあるのですが、結構作り込まれたテンプレートが展開されます。構造を理解することがやや大変なので、今回はシンプルなテンプレートからの作成を紹介します。</p>
<p>このあと、スクラッチ組織を作成、もしくは既存のスクラッチ組織に接続します。組織にログインして機能有効化を行ってください。</p>
<ul>
<li>設定 &gt; アプリケーション &gt; Salesforce Multi-Framework を使用した React 開発 (ベータ)</li>
<li>「Enable Beta」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206183" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012447/salesforce-multi-framework-react-jp-image2.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>この機能はオフにできませんので、必ず Developer Edition や Sandbox などで試すようにしてください。</p>
<p>このあとはローカルの VS Code での操作を進めます。Standard で作成したプロジェクトで、スクラッチ組織に接続した状態にしておきます。</p>
<h2>ステップ1: テンプレートを展開</h2>
<p>まずターミナルを開き、次のコマンドを実行します。</p>
<pre>sf template generate ui-bundle -n myreactapp -d "./force-app/main/default/uiBundles" -t reactbasic</pre>
<p>force-app/main/default/myreactapp ディレクトリに必要なファイルが展開されます。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206182" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012445/salesforce-multi-framework-react-jp-image3.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>このディレクトリに移動して、install と run dev を実行します。</p>
<pre># ディレクトリに移動
cd force-app/main/default/uiBundles/myreactapp

# 必要なライブラリをインストール
npm install

# ローカルで実行
npm run dev</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206181" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012443/salesforce-multi-framework-react-jp-image4.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>ブラウザを開いて、表示された URL にアクセスしてみます。次のように表示されたら成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206180" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012441/salesforce-multi-framework-react-jp-image5.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>ターミナルで Ctrl + C でローカルのサーバーを止めておきます。</p>
<h2>ステップ2: ビルドとデプロイ</h2>
<p>2026年4月25日時点ですが、graphqlClient.ts でエラーを検出しています。当該ファイルの13行目を次のように修正します。</p>
<pre>修正前: const response = await data.graphql?.&lt;TData, TVariables&gt;(query, variables);
修正後: const response = await data.graphql?.&lt;TData, TVariables&gt;({query, variables});</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206179" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012437/salesforce-multi-framework-react-jp-image6.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>それではビルドを行います。同じフォルダで次のコマンドを実行します。</p>
<pre>npm run build</pre>
<p>エラーが出なければ成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206178" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012434/salesforce-multi-framework-react-jp-image7.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>それでは組織にデプロイしてみましょう。次のコマンドを実行します。(スクラッチ組織の場合のコマンドです)</p>
<pre>sf project deploy start</pre>
<p>Status が Succeeded で完了すれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206177" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012430/salesforce-multi-framework-react-jp-image8.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<h2>ステップ3: 動作確認</h2>
<p>それでは組織にデプロイされた React アプリを見てみましょう。</p>
<ul>
<li>アプリケーションランチャー &gt; Myreactapp</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206176" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012427/salesforce-multi-framework-react-jp-image9.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>先ほどのローカルテストと同じように表示されれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206175" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012423/salesforce-multi-framework-react-jp-image10.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<h2>ステップ4: 取引先のデータを表示できるように修正</h2>
<p>pages ディレクトリの下に「Accounts.tsx」ファイルを作成します。(Agentforce Vibes に作ってもらいましたので、切り詰めればもっとシンプルにできるかもしれません。)</p>
<pre>import { useEffect, useState } from 'react';
import { executeGraphQL } from '@/api/graphqlClient';
import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from '@/components/ui/table';
import { Skeleton } from '@/components/ui/skeleton';
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';

interface AccountNode {
  Id: string;
  Name: { value: string };
  Website: { value: string | null };
}

interface AccountsData {
  uiapi: {
    query: {
      Account: {
        edges: Array&lt;{
          node: AccountNode;
        }&gt;;
      };
    };
  };
}

const ACCOUNTS_QUERY = `query GetAccounts {
  uiapi {
    query {
      Account {
        edges {
          node {
            Id
            Name {
              value
            }
            Website {
              value
            }
          }
        }
      }
    }
  }
}`;

export default function Accounts() {
const [accounts, setAccounts] = useState&lt;AccountNode[]&gt;([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState&lt;string | null&gt;(null);

  useEffect(() =&gt; {
const fetchAccounts = async () =&gt; {
try {
        setLoading(true);
        setError(null);
const data = await executeGraphQL&lt;AccountsData, undefined&gt;(ACCOUNTS_QUERY);
const accountNodes = data.uiapi.query.Account.edges.map(edge =&gt; edge.node);
        setAccounts(accountNodes);
      } catch (err) {
        setError(err instanceof Error ? err.message : 'Failed to fetch accounts');
        console.error('Error fetching accounts:', err);
      } finally {
        setLoading(false);
      }
    };
    fetchAccounts();
  }, []);

if (loading) {
return (
      &lt;div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12"&gt;
        &lt;h1 className="text-3xl font-bold text-gray-900 mb-6"&gt;取引先一覧&lt;/h1&gt;
        &lt;div className="space-y-2"&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    );
  }

if (error) {
return (
      &lt;div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12"&gt;
        &lt;h1 className="text-3xl font-bold text-gray-900 mb-6"&gt;取引先一覧&lt;/h1&gt;
        &lt;Alert variant="destructive"&gt;
          &lt;AlertTitle&gt;エラー&lt;/AlertTitle&gt;
          &lt;AlertDescription&gt;{error}&lt;/AlertDescription&gt;
        &lt;/Alert&gt;
      &lt;/div&gt;
    );
  }

return (
    &lt;div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12"&gt;
      &lt;div className="mb-6"&gt;
        &lt;h1 className="text-3xl font-bold text-gray-900"&gt;取引先一覧&lt;/h1&gt;
                  全{accounts.length}件の取引先が登録されています
      &lt;/div&gt;
      {accounts.length === 0 ? (
        &lt;Alert&gt;
          &lt;AlertTitle&gt;取引先がありません&lt;/AlertTitle&gt;
          &lt;AlertDescription&gt;
            現在、登録されている取引先はありません。
          &lt;/AlertDescription&gt;
        &lt;/Alert&gt;
      ) : (
        &lt;div className="border rounded-lg overflow-hidden"&gt;
          &lt;Table&gt;
            &lt;TableHeader&gt;
              &lt;TableRow&gt;
                &lt;TableHead className="font-semibold"&gt;ID&lt;/TableHead&gt;
                &lt;TableHead className="font-semibold"&gt;取引先名&lt;/TableHead&gt;
                &lt;TableHead className="font-semibold"&gt;ウェブサイト&lt;/TableHead&gt;
              &lt;/TableRow&gt;
            &lt;/TableHeader&gt;
            &lt;TableBody&gt;
              {accounts.map(account =&gt; (
                &lt;TableRow key={account.Id}&gt;
                  &lt;TableCell className="font-mono text-sm"&gt;
                    {account.Id}
                  &lt;/TableCell&gt;
                  &lt;TableCell className="font-medium"&gt;
                    {account.Name.value}
                  &lt;/TableCell&gt;
                  &lt;TableCell&gt;
                    {account.Website.value ? (
                      &lt;a
                         href={account.Website.value}
                         target="_blank" rel="noopener noreferrer"
className="text-blue-600 hover:underline"&gt;
                        {account.Website.value}
                      &lt;/a&gt;
                    ) : ('—')}
                  &lt;/TableCell&gt;
                &lt;/TableRow&gt;
              ))}
            &lt;/TableBody&gt;
          &lt;/Table&gt;
        &lt;/div&gt;
      )}
    &lt;/div&gt;
  );
}</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206174" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012420/salesforce-multi-framework-react-jp-image11.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>routes.tsx ファイルを次の内容に置き換えます。</p>
<pre>import type { RouteObject } from 'react-router';
import AppLayout from '@/appLayout';
import Home from './pages/Home';
import Accounts from './pages/Accounts';
import NotFound from './pages/NotFound';

export const routes: RouteObject[] = [
  {
    path: '/',
    element: &lt;AppLayout /&gt;,
    children: [
      {
        index: true,
        element: &lt;Home /&gt;,
        handle: { showInNavigation: true, label: 'Home' },
      },
      {
        path: 'accounts',
        element: &lt;Accounts /&gt;,
        handle: { showInNavigation: true, label: '取引先' },
      },
      {
        path: '*',
        element: &lt;NotFound /&gt;,
      },
    ],
  },
];</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206173" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012417/salesforce-multi-framework-react-jp-image12.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<h2>ステップ5: 再ビルドとデプロイ</h2>
<p>ファイルの修正が完了したら、再度ビルドを行い組織にデプロイします。</p>
<pre># ビルドの実行
npm run build

# デプロイの実行
sf project deploy start

# もしソースファイルエラーやコンフリクトが発生した場合(コマンドを実行するディレクトリによって --source-dir の引数は要調整)
sf project deploy start --source-dir . --ignore-conflicts</pre>
<p>Status が Succeeded で完了すれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206172" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012414/salesforce-multi-framework-react-jp-image13.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<h2>ステップ6: 動作確認</h2>
<p>スクラッチ組織の場合、取引先にはデータが何もないのでいくつか作成しておきます。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206171" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012410/salesforce-multi-framework-react-jp-image14.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>再度 Myreactapp を表示します。画面右上のメニューアイコンを押すと「取引先」選択肢が出現し、選択すると取引先の一覧が表示されれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206170" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012407/salesforce-multi-framework-react-jp-image15.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206169" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012404/salesforce-multi-framework-react-jp-image16.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<h2>おわりに</h2>
<p>今までは Lightnign Experience &amp; Lightning Web Components と Visualforce に頼っていた Web ブラウザへの UI 提供ですが、React にも対応したことで、そのデータの表現力が格段に向上しました。いわゆる社内向けの UI はもちろん、Experience Cloud での社外向けサイトでの利用も可能です。正式リリースまで今しばらくお待ちください。</p>
<p>今回はすべて手動での作業手順でご紹介しましたが、もちろんバイブコーディングで開発を進めていくこともできます。Agentforce Vibes はもちろん、その他のコーディング支援ツールでも利用できるようにスキルを公開していたりしますので、ぜひご活用ください。</p>
<ul>
<li><a href="https://github.com/forcedotcom/afv-library">Github: Agentforce Vibes Library</a></li>
</ul>
<p>SFDX プロジェクトの新規作成を行う際に、React Internal App を選ぶとより作り込まれたテンプレートが展開されます。Agentforce で作成したエージェントとのチャットも行える UI も組み込まれています。こちらもぜひ試してみてください。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206168" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012400/salesforce-multi-framework-react-jp-image17.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<h3>参考資料</h3>
<ul>
<li><a href="https://developer.salesforce.com/docs/platform/einstein-for-devs/guide/reactdev-overview.html">Agentforce Vibes Developer Guide: Build a React App with Salesforce Multi-Framework (Beta)</a></li>
<li><a href="https://github.com/forcedotcom/afv-library">Github: Agentforce Vibes Library</a></li>
<li><a href="https://trailhead.salesforce.com/ja/content/learn/modules/agentforce-vibes-react-open-beta-quick-look">Agentforce Vibes React (Open Beta): Quick Look</a></li>
<li><a href="https://github.com/trailheadapps/multiframework-recipes">Github: Multiframework Recipes</a></li>
</ul>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp">Salesforce Mult-Framework を使用した React による UI 開発</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206163</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260425011219/salesforce-multi-framework-react-jp-featured.png?w=1200" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260425011219/salesforce-multi-framework-react-jp-featured.png?w=1200" medium="image" />
	</item>
		<item>
		<title>Beyond Static Analysis: How Scale Center’s New Database Insights Thinks Like a DBA</title>
		<link>https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba#respond</comments>
		<pubDate>Thu, 23 Apr 2026 14:00:32 +0000</pubDate>
		<dc:creator><![CDATA[Anand Vardhan]]></dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Salesforce Releases]]></category>
		<category><![CDATA[Bind Variables]]></category>
		<category><![CDATA[Database Performance]]></category>
		<category><![CDATA[Execution Plans]]></category>
		<category><![CDATA[Large Data Volumes]]></category>
		<category><![CDATA[Performance Tuning]]></category>
		<category><![CDATA[Salesforce Architecture]]></category>
		<category><![CDATA[Scale Center]]></category>
		<category><![CDATA[SOQL Optimization]]></category>
		<category><![CDATA[Static Analysis]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205998</guid>
		<description><![CDATA[<p>Optimize your most complex queries by bridging the &lsquo;runtime reality&rsquo; gap with Database Insights. Learn to use actual bind values and execution plans to fix performance bottlenecks.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba">Beyond Static Analysis: How Scale Center’s New Database Insights Thinks Like a DBA</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">In the world of Salesforce engineering, a SOQL query is the heartbeat of your application. But as any architect of an org with significant processing or large data volumes knows,</span> <span style="font-weight: 400">not all SOQL queries are created equal</span><span style="font-weight: 400">.</span><span style="font-weight: 400"> You might have a perfectly formatted query that passes every linting test, yet still brings a production pod to its knees during peak hours.</span></p>
<p><span style="font-weight: 400">Historically, tools for addressing this challenge have relied on</span> <b>top-down analysis </b><span style="font-weight: 400">— scanning Apex metadata to find suspicious patterns. Today, we are unveiling a</span><b> bottom-up revolution</b><span style="font-weight: 400">: </span><a href="https://help.salesforce.com/s/articleView?id=xcloud.database_insights_overview.htm&amp;type=5"><b>Database Insights in Scale Center</b></a><span style="font-weight: 400">.</span></p>
<h2><span style="font-weight: 400">The &#8220;runtime reality&#8221; gap</span></h2>
<p><span style="font-weight: 400">Traditional performance analysis tools suffer from a </span><i><span style="font-weight: 400">runtime reality gap</span></i><span style="font-weight: 400">. They look at your code repository and say, </span><i><span style="font-weight: 400">&#8220;This query uses an indexed field; it&#8217;s fine.&#8221;</span></i><span style="font-weight: 400"> But enterprise-grade applications live and breathe </span><a href="https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_relationships.htm"><b>dynamic SOQL</b></a><span style="font-weight: 400">, where the query isn&#8217;t fully built until the moment a user clicks a button.</span></p>
<p><span style="font-weight: 400">Static scanners are blind to the </span><a href="https://trailhead.salesforce.com/content/learn/modules/soql-for-admins/use-bind-variables-and-aggregate-functions"><b>bind variable values</b></a><span style="font-weight: 400"> — the actual data passed into your filters at runtime. Without knowing these values, it is impossible to distinguish between a </span><b>s</b><b><i>elective success</i></b><span style="font-weight: 400"> and a </span><b>t</b><b><i>able-scan terror</i></b><span style="font-weight: 400">:</span></p>
<ul>
<li style="font-weight: 400"><b>Selective success:</b><span style="font-weight: 400"> Your query uses an index to jump straight to the 10 records you need out of millions. It’s fast, efficient, and keeps your org snappy.</span></li>
<li style="font-weight: 400"><b>Table-scan terror:</b><span style="font-weight: 400"> This occurs when the database engine cannot use an index and is forced to look at every single record in a table to find a match.</span></li>
</ul>
<p><b>Architect’s tip:</b><span style="font-weight: 400"> Think of a table scan like trying to find a specific quote in a 500-page book by reading every single word from page one, rather than using the index at the back to jump to the right page. When your table grows to millions of rows, these scans cause CPU timeouts and slow down the entire platform for your users.</span></p>
<p><span style="font-weight: 400">Navigate to Database Insights from Setup &gt;&gt; Scale Center &gt;&gt; Database Insights.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206000" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260409161611/A-screenshot-showing-how-to-navigate-to-Database-Insights-in-Scale-Center-e1775772984411.png?w=1000" class="postimages" width="1000" height="480" alt="A screenshot showing how to navigate to Database Insights in Scale Center" />
			  </span>
			</p>
<h2><span style="font-weight: 400">Engineering the bottom-up approach</span></h2>
<p><span style="font-weight: 400">Database Insights turns the traditional model on its head. You don&#8217;t guess which queries are slow; you start where the performance impact is actually felt</span><span style="font-weight: 400">: the database. This is a three-step process.</span></p>
<h3><span style="font-weight: 400">1. Identifying the heavy lifters</span></h3>
<p><span style="font-weight: 400">Instead of analyzing every line of code, with the bottom-up approach you identify the specific queries driving resource consumption during your most critical business windows. Think of it like a database administrator using standard system views (similar to open-source equivalents like</span> <a href="https://www.postgresql.org/docs/current/pgstatstatements.html"><span style="font-weight: 400">pg_stat_statements</span></a><span style="font-weight: 400">).</span><span style="font-weight: 400"> You isolate the queries that dominated CPU usage during your org’s peak performance hour, helping you identify the specific code causing the most friction.</span></p>
<h3><span style="font-weight: 400">2. Intelligence-driven reconstruction</span></h3>
<p><span style="font-weight: 400">A raw database execution looks very different from the Apex you wrote. Our platform uses a sophisticated</span> <b>mapping engine</b> <span style="font-weight: 400">to bridge the gap between runtime database activity and your source code:</span></p>
<ul>
<li style="font-weight: 400"><b>Context discovery:</b> <span style="font-weight: 400">The system automatically filters out system overhead to focus exclusively on your custom logic.</span></li>
<li style="font-weight: 400"><b>Traceability:</b> <span style="font-weight: 400">The system correlates database activity back to its origin — whether that’s a specific Apex class, Flow, or report.</span></li>
<li style="font-weight: 400"><b>Bind-value awareness:</b><span style="font-weight: 400"> It captures the </span><b>actual bind variable values</b> <span style="font-weight: 400">passed to the database. Knowing a query failed because of a </span><span style="font-weight: 400">NULL</span><span style="font-weight: 400"> filter can be the difference between a guess and a guaranteed fix.</span></li>
</ul>
<h3><span style="font-weight: 400">3. Execution-plan analysis </span></h3>
<p><span style="font-weight: 400">Once the query has been reconstructed by the mapping engine, it is analyzed by the</span> <b>Database Insights optimization engine</b><b>.</b><span style="font-weight: 400"> By evaluating the</span> <b>actual database execution plan </b><span style="font-weight: 400">— </span><span style="font-weight: 400">the same way an expert uses an</span> <a href="https://www.postgresql.org/docs/current/using-explain.html"><span style="font-weight: 400">EXPLAIN</span></a> <span style="font-weight: 400">command </span><span style="font-weight: 400">— </span><span style="font-weight: 400">we generate surgical recommendations based on that execution plan for the query.</span></p>
<h2><span style="font-weight: 400">Case study: The dynamic predicate problem</span></h2>
<p><span style="font-weight: 400">Consider a common pattern: a utility class that fetches records based on dynamic filters. </span></p>
<pre language="apex">public static List simpleBindingSoqlQuery(Map&lt;String, Object&gt; bindParams) {
    String queryString =
        'SELECT Id, Name ' +
        'FROM Account ' +
        'WHERE name = :name';
    return Database.queryWithBinds(
        queryString,
        bindParams,
        AccessLevel.USER_MODE
    );
}

String accountName = 'Acme Inc.';
Map&lt;String, Object&gt; nameBind = new Map&lt;String, Object&gt;{'name' =&gt; accountName};
List accounts = simpleBindingSoqlQuery(nameBind);
System.debug(accounts);
</pre>
<p><span style="font-weight: 400">A static scanner inspects the Apex code and reports that the query passes all checks — it uses bind variables, is sanitized, and shows no obvious flaws. In reality, during peak traffic, Scale Center identifies this method as a top CPU consumer because the runtime data exposes issues that static analysis cannot see.</span></p>
<h3><span style="font-weight: 400">Example: The non-selective null</span></h3>
<p>A UI component accidentally passes a <span>null</span><span> value into the filter. The reconstructed SOQL becomes</span><b><span>:<br />
</span></b><br />
<span> </span><code><span>SELECT Id, Name FROM Account WHERE name = null<br />
</span></code><br />
Since <code>NULL</code> values are rarely indexed effectively in large datasets, the engine scans millions of rows in a full table scan. Scale Center flags this as a high-CPU query, notes that the filter &#8216;Name&#8217; is receiving null values, and provides the recommendation: add a null-check in the Apex controller before execution to prevent <code>NULL</code> values from reaching the query.</p>
<h3><span style="font-weight: 400">Example: The polymorphic date bloat</span></h3>
<p><span style="font-weight: 400">A report generation tool builds a query with a wide date range. The reconstructed SOQL is:</span></p>
<p><code>SELECT Id FROM Case WHERE CreatedDate = LAST_N_DAYS:365 AND Status = 'Closed'</code></p>
<p><span style="font-weight: 400">In this case, the database performs an index skip scan. The combination of a broad date range and a low-cardinality status field forces the database engine to examine far more rows than necessary. Scale Center identifies this high CPU usage and recommends narrowing the date range to 30 days or including the Status field in a composite index to improve selectivity.</span></p>
<h2><span style="font-weight: 400">Comparing static analysis and Database Insights</span></h2>
<p><span style="font-weight: 400">The following table shows how a traditional static Apex parser differs from Database Insights across visibility, complexity, performance, and context.</span></p>
<table>
<tbody>
<tr>
<td><b>Feature</b></td>
<td><b>Static Apex Parser</b></td>
<td><b>Scale Center Database Insights</b></td>
</tr>
<tr>
<td><b>Visibility</b></td>
<td><span style="font-weight: 400">String templates only</span></td>
<td><span style="font-weight: 400">Final string + actual bind values</span></td>
</tr>
<tr>
<td><b>Complexity</b></td>
<td><span style="font-weight: 400">Struggles with concatenation</span></td>
<td><span style="font-weight: 400">Captures exact SQL sent to engine</span></td>
</tr>
<tr>
<td><b>Performance</b></td>
<td><span style="font-weight: 400">Best-practice guesses</span></td>
<td><span style="font-weight: 400">Measures actual CPU milliseconds</span></td>
</tr>
<tr>
<td><b>Context</b></td>
<td><span style="font-weight: 400">Blind to table volume</span></td>
<td><span style="font-weight: 400">Analyzes the execution plan to understand true query cost and selectivity</span></td>
</tr>
</tbody>
</table>
<h2><span style="font-weight: 400">How to use Database Insights results</span></h2>
<p><span style="font-weight: 400">When you open Database Insights, don’t focus only on the SOQL string. Look at both the &#8220;SOQL&#8221; and the “Recommendation” columns</span><span style="font-weight: 400"> to identify the actual queries and suggestions for how to improve them.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206002" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260409161652/A-tabular-view-of-Database-Insights-results-e1775773028368.png?w=1000" class="postimages" width="1000" height="460" alt="A tabular view of Database Insights results" />
			  </span>
			</p>
<h2><span style="font-weight: 400">A game changer for architects and developers</span></h2>
<p><span style="font-weight: 400">If you are managing a large-scale implementation, Database Insights in Scale Center provides unique capabilities that are not available through static analysis alone.</span></p>
<p><span style="font-weight: 400">First, it enables </span><b>impact-based prioritization.</b> <span style="font-weight: 400">You aren&#8217;t investigating and fixing 100 &#8220;</span><i><span style="font-weight: 400">maybe</span></i><span style="font-weight: 400">&#8221; slow queries</span><span style="font-weight: 400">.</span><span style="font-weight: 400"> You are fixing the top 15 queries that </span><i><span style="font-weight: 400">actually</span></i><span style="font-weight: 400"> consumed the most CPU during your busiest hour last week. Second, it supports </span><b>infrastructure stability</b><b>.</b><span style="font-weight: 400"> By optimizing these expensive, suboptimal SQL queries, you aren&#8217;t just helping your users; you are also protecting the pod&#8217;s availability and reducing the risk of concurrent request limit exceptions.</span></p>
<p><span style="font-weight: 400">Database Insights is not just another dashboard. It is a bridge between the database optimizer and the Apex developer. </span><span style="font-weight: 400">By analyzing how queries are executed and providing targeted recommendations</span><span style="font-weight: 400"> and providing a library of fixes, we are moving from </span><span style="font-weight: 400">passive monitoring to actionable, data-driven recommendations.</span></p>
<h2><span style="font-weight: 500">About the author</span></h2>
<p><b>Anand Vardhan</b> <span style="font-weight: 400">is a Product Owner for the Scalability Products Team, helping customers develop scalable solutions on the Customer 360 platform. Anand designs features for Scale Center and Scale Test products. His background includes performance and scale engineering, server-side optimization, Lightning, application design, caching, and managing large data volumes. Follow Anand on</span> <a href="https://www.linkedin.com/in/anandvardhan08/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba">Beyond Static Analysis: How Scale Center’s New Database Insights Thinks Like a DBA</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205998</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260409163827/Generic-B-1-e1775774323533.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260409163827/Generic-B-1-e1775774323533.png?w=1000" medium="image" />
	</item>
		<item>
		<title>話しかけるだけで商談情報を自動更新 Salesforce Flow × Structured Output（構造化出力） の実装例</title>
		<link>https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp#respond</comments>
		<pubDate>Thu, 23 Apr 2026 03:29:20 +0000</pubDate>
		<dc:creator><![CDATA[Hiroyuki Inaba]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[Prompt Builder]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206141</guid>
		<description><![CDATA[<p>Salesforce Flow&#12392;Prompt Template&#12398;&#27083;&#36896;&#21270;&#20986;&#21147;&#27231;&#33021;&#12434;&#27963;&#29992;&#12375;&#12289;&#38899;&#22768;&#20837;&#21147;&#12391;CRM&#24773;&#22577;&#12434;&#33258;&#21205;&#26356;&#26032;&#12377;&#12427;&#23455;&#35013;&#20363;&#12434;&#35299;&#35500;&#12290;&#21830;&#35527;&#24460;&#12398;&#12513;&#12514;&#12434;&#35441;&#12377;&#12384;&#12369;&#12391;&#12289;AI&#12364;&#20104;&#31639;&#12539;&#35506;&#38988;&#12539;&#12473;&#12486;&#12540;&#12472;&#12394;&#12393;&#12434;&#33258;&#21205;&#12391;&#38917;&#30446;&#21029;&#12395;&#25391;&#12426;&#20998;&#12369;&#12290;&#12494;&#12540;&#12467;&#12540;&#12489;&#12391;&#23455;&#29694;&#12377;&#12427;&#21942;&#26989;DX&#12398;&#23455;&#36341;&#12460;&#12452;&#12489;&#12290;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp">話しかけるだけで商談情報を自動更新 Salesforce Flow × Structured Output（構造化出力） の実装例</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<h2>はじめに</h2>
<p>「商談が終わったら、すぐに活動内容を入力してください」</p>
<p>営業現場でよく聞くこの一言が、いかに現場の負担になっているか。</p>
<p>移動中、次のアポの準備中、それでも入力しなければならない。結果として記録が後回しになり、CRMのデータ品質が下がり、マネージャーは実態が見えなくなる···そんな悪循環は、多くの営業組織が抱える慢性的な課題です。</p>
<p>この記事では、Salesforce の 画面フロー機能とPrompt TemplateのStructured Output(構造化出力)機能を組み合わせて、この課題をどのように解決できるかを、実際の実装例をもとに解説します。</p>
<h2>動画:利用イメージ</h2>
<p><a href="https://salesforce.vidyard.com/watch/M3f8dwz5XPL1ybdCS71zAP">音声入力ーAIによる項目振り分け</a><br />
<!-- Put this wherever you would like your player to appear --><br />

			  <span class="postimagessection_specify vidyard-player-embed" >
			    <img decoding="async" src="https://play.vidyard.com/M3f8dwz5XPL1ybdCS71zAP.jpg" class="postimages" width="" height="" alt="" />
			  </span>
			</p>
<p>この機能を使った利用例がこちらです。モバイルに音声で話すだけで、AIが重要情報を自動抽出し情報を更新します。本例ではテストオブジェクトというカスタムオブジェクトを対象としていますが、どのオブジェクトに対しても転用可能です。</p>
<h2>何をする機能なのか</h2>
<p>やっていることはシンプルです。</p>
<p>ここでは、レコードページから画面を起動する例をご紹介します。</p>
<ol>
<li>営業担当者がレコードページのボタンを押す</li>
<li>「ここに音声入力してください」というテキストエリアが表示される</li>
<li>担当者は商談の内容を自由に話すか、テキストで入力する</li>
<li>「次へ」を押すとAIが内容を解析し、案件の各項目を自動で更新する</li>
</ol>
<p>従来であれば「課題は何か」「予算はどれくらいか」「ステージはどこまで進んだか」を個別に入力する必要がありました。このフローでは、商談後のメモを自由形式で入力するだけで、AIがそれらを自動的に仕分けして書き込みます。</p>
<h2>プロンプトについて</h2>
<p>プロンプト全文と応答構造</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206149" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203220/salesforce-flow-structured-output-image05.png?w=997" class="postimages" width="997" height="708" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206147" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203213/salesforce-flow-structured-output-image03.png?w=1091" class="postimages" width="1091" height="1000" alt="" />
			  </span>
			</p>
<p>&nbsp;</p>
<p>本例ではテストオブジェクトを対象としていますが、このプロンプトは商談オブジェクトに更新する想定のプロンプトです。</p>
<h3><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25aa.png" alt="▪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> プロンプト全文</h3>
<pre>【Role】
活動報告の音声文字起こしを最小修正で正規化(内部のみ)し、以下を出力せよ(コードフェンス禁止)。

【抽出用マーカー規約(厳守)】
- Key: opp.stage / opp.pain / opp.start / opp.event / opp.budget / opp.req

【Inputs】
- raw_transcript: {!$Input:input}

【商談更新用(値のみ・ラベル無し・推定抽出強化)】
- すべての opp.* は、タグ内にプレーンテキストの値のみを簡潔に1行250文字以内で出力。
- 禁止:Markdown記法(太字・リストなど)、ラベル("金額:"など)、カッコ装飾、信頼度スコア、引用符、改行。
- 抽出基準(重要):
  - 「確定」していなくても、会話の中で登場した見込み値、概算、候補、提案内容があれば積極的に抽出すること。
  - わずかでも関連する言及があれば値を入れ、「本MTGでは更新候補無し」としないこと。
- 整形ルール:改行は半角スペースへ変換。連続空白は1つへ短縮。
- 完全除外条件:会話全体を通して、そのトピックに関する言及が一切なかった場合のみ、「本MTGでは更新候補無し」を出力。

[各項目の抽出指針]
- opp.stage: 商談の現在の到達点と顧客の温度感を要約した説明文。単なるフェーズ名(例:「提案」)ではなく、「担当者は前向きだが部長決裁待ち」「機能要件は合意したが予算で難航中」のように具体的な状況を記述すること。
- opp.pain: 顧客が漏らした悩み、不満、現状の課題(推測含む)。簡潔に1文で記載。
- opp.start: 開始時期、導入時期、納期の目安(「来春」「4月頃」等のテキストも可)。簡潔に1文で記載。
- opp.event: 今後のマイルストーン、コンペリングイベント(幹部プレゼン、定例会、PoC開始など)。簡潔に1文で記載。
- opp.budget: 金額、予算感、価格帯、コストに関する言及(「100万くらい」「予算確保済み」など幅のある表現もそのまま抽出)。簡潔に1文で記載。
- opp.req: 機能要件、要望、導入条件、制約事項。簡潔に1文で記載。
</pre>
<h3><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25aa.png" alt="▪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> プロンプトの設計ポイント</h3>
<p><strong>【1. 使用モデル:Gemini 2.5 Flash】</strong></p>
<p>今回はGemini 2.5 Flashを使用しています。速度とコストのバランスが良く、日本語の音声文字起こし処理に適したモデルです。</p>
<p><strong>【2. 出力形式:JSON構造化出力+セクションマーカー方式】</strong></p>
<p>プロンプト自体はシンプルなテキスト指示ですが、SalesforceのStructured Output(構造化出力)機能によって、AIの回答はJSON形式で返されます。フロー側では structuredResponse.budget のようにドット記法で各項目に直接アクセスできるため、追加のパース処理は一切不要です。</p>
<p><strong>【3. 「確定情報でなくても積極的に抽出する」という指示】</strong></p>
<p>通常のデータ抽出では「確実な情報のみ抽出」という指示が多いですが、このプロンプトは逆のアプローチを取っています。商談では「100万くらい」「来春かな」という曖昧な言及も重要な営業情報であるため、「わずかでも言及があれば値を入れる」と明示しています。</p>
<p><strong>【4. 空欄上書きリスクを防ぐ「完全除外条件」】</strong></p>
<p>「一切言及がなかった場合のみ『本MTGでは更新候補無し』」と書くことで、フロー側の制御でこのキーワードが格納されている場合は更新しないように制御することができます。この制御を入れることで、既存のCRMデータが空欄で上書きされてしまうリスクを防ぐことができます。(今回のフローではこの制御分岐は入れていません)</p>
<p><strong>【5. ステージは「状態の文章」で記録する】</strong></p>
<p>opp.stage(案件ステージ)に対して、単に「提案中」「交渉中」ではなく「担当者は前向きだが部長決裁待ち」のような状況説明文を要求しています。マネージャーがリスト画面を一覧したときに、クリックせずに状況が把握できるCRMを実現するための設計です。</p>
<h3>出力形式:JSON応答構造について</h3>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206151" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203227/salesforce-flow-structured-output-image07.png?w=479" class="postimages" width="479" height="544" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206145" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203207/salesforce-flow-structured-output-image01.png?w=479" class="postimages" width="479" height="544" alt="" />
			  </span>
			</p>
<p>ここで、応答形式をJSON、応答構造から「新しいLightning種類」を選択し出力構造を作成します。</p>
<p>名称を指定します</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206146" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203210/salesforce-flow-structured-output-image02.png?w=1279" class="postimages" width="1279" height="438" alt="" />
			  </span>
			</p>
<p>次に、出力先項目を指定します。ここの項目変数名はプロンプト側と整合性が取れる形にする必要があります。(ただし、厳密に完全一致させなくても大丈夫です)</p>
<p>また、この説明欄を入力することで、より精度高く抽出することが可能になります。プロンプト側でしっかりと定義している場合には記載していなくても問題ありません。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206148" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203216/salesforce-flow-structured-output-image04.png?w=1269" class="postimages" width="1269" height="909" alt="" />
			  </span>
			</p>
<h3>補足:JSON応答構造を利用する場合の注意事項</h3>
<p>カスタム Lightning 種類で項目のデータ型が Date, DateTime, Time だった場合は、フローから値にアクセスしても取得できない問題があります。(2026/3/6 確認時点)</p>
<p>現状回避策として Lightning 種類では String にしておき、フローの数式項目を使って変換します。</p>
<h2>フローの構造</h2>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206152" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203230/salesforce-flow-structured-output-image08.png?w=1168" class="postimages" width="1168" height="825" alt="" />
			  </span>
			</p>
<p>技術的には、以下の4ステップで構成されています。</p>
<p><strong>STEP 1:レコードの取得</strong></p>
<p>対象レコードのIDをもとに、現在の商談情報を取得します。</p>
<p><strong>STEP 2:音声入力画面</strong></p>
<p>ユーザーに向けて「ここに音声入力してください」というテキストエリアを表示します。フロー種類は Screen Flow(画面フロー)であるため、Lightning ページ上でそのままウィジェットとして起動できます。</p>
<p><strong>STEP 3:AIによる解析</strong></p>
<p>ここが核心部分です。Flow の generatePromptResponse アクションを通じて、Prompt Template(プロンプトテンプレート)を呼び出します。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206154" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203236/salesforce-flow-structured-output-image10.png?w=976" class="postimages" width="976" height="776" alt="" />
			  </span>
			</p>
<p>入力として先ほどのテキストエリアの内容を渡すと、AIが以下の6項目を JSON 形式で返します。</p>
<ul>
<li>budget 予算情報</li>
<li>event コンペリングイベント</li>
<li>pain 顧客課題</li>
<li>stage 案件ステージの進捗</li>
<li>req 要求仕様・要件</li>
<li>start 導入時期・タイミング</li>
</ul>
<p>これは Salesforce の Structured Output(構造化出力)機能を活用したものです。</p>
<p>AIに対して「この形式のJSONで回答せよ」と指定することで、後続の処理でそのまま各フィールドに書き込めるようになります。</p>
<p><strong>STEP 4:レコードの更新</strong></p>
<p>STEP 3 で得たJSONの各値を、対応するレコードの項目にそれぞれ書き込んで完了です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206150" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203224/salesforce-flow-structured-output-image06.png?w=1101" class="postimages" width="1101" height="824" alt="" />
			  </span>
			</p>
<h3>補足:</h3>
<p>「本MTGでは更新候補無し」の場合には更新しない制御を入れる場合には、このように決定要素による条件分岐を入れることによって実現可能です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206153" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203233/salesforce-flow-structured-output-image09.png?w=1589" class="postimages" width="1589" height="799" alt="" />
			  </span>
			</p>
<h2>なぜ Structured Output(構造化出力) が重要なのか</h2>
<p>従来のAI活用では、AIの回答はテキストとして返ってくるため、「その中から必要な情報を抜き出す」という後処理が必要でした。正規表現や文字列解析を駆使しても、AIの回答のゆらぎに対応しきれないケースがありました。</p>
<p>Structured Output を使うと、AIは最初から指定した構造のJSONで回答します。フローから見れば structuredResponse.budget のように、オブジェクトのプロパティとして値を参照できるため、追加の解析処理が不要になります。</p>
<p>この仕組みにより、「AIの出力をそのままSalesforceの項目に書き込む」という処理が、コードを一行も書かずにノーコードで実現できます。</p>
<h2>現場への展開イメージ</h2>
<p>このデモ実装ではテスト用カスタムオブジェクトを対象としていますが、実運用では Opportunity(商談)や Event(行動)オブジェクトへの応用が考えられます。</p>
<p>たとえば:</p>
<ul>
<li>商談終了後:担当者が車の中で商談メモを音声入力 → Opportunity の StageName、予算、顧客課題などが自動更新</li>
<li>訪問報告:活動内容をフリーテキストで記録 → 「競合情報」「顧客要望」「次のアクション」が自動でカテゴリ分けされて記録</li>
<li>マネージャーレビュー: AI が整理した項目をもとに状況をレポートで一目で確認、週次レビューの準備時間を削減</li>
</ul>
<h2>まとめ</h2>
<p>Salesforce Flow の generatePromptResponse アクションと Prompt Template の Structured Output を組み合わせることで、「自由なテキスト入力 → 構造化されたCRMデータ」という変換が、驚くほどシンプルな構成で実現できます。</p>
<ul>
<li>ノーコード:Apexを書かずにFlowとテンプレートだけで構築可能</li>
<li>構造化出力:AIの回答を最初からJSONで受け取るためパース処理不要</li>
<li>現場への展開:Lightningページにボタン一つで組み込めるScreen Flow形式</li>
</ul>
<p>「営業がCRMを入力しない問題」は、ツールの問題ではなく入力コストの問題です。入力コストをAIで限りなくゼロに近づけることが、データ品質と現場定着の鍵になります。</p>
<p>※ 本記事は Salesforce の実装例をもとに作成しています。ご紹介した機能はお客様の環境に応じて Agentforce 関連のライセンスや設定が必要な場合があります。</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp">話しかけるだけで商談情報を自動更新 Salesforce Flow × Structured Output（構造化出力） の実装例</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206141</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260422204428/salesforce-flow-structured-output-jp_featured.png?w=1200" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260422204428/salesforce-flow-structured-output-jp_featured.png?w=1200" medium="image" />
	</item>
		<item>
		<title>Simplify Your LWC Development with Complex Template Expressions</title>
		<link>https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions#respond</comments>
		<pubDate>Tue, 21 Apr 2026 15:00:10 +0000</pubDate>
		<dc:creator><![CDATA[Sarah Welker]]></dc:creator>
				<category><![CDATA[App Development]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Lightning Web Components]]></category>
		<category><![CDATA[New Developments]]></category>
		<category><![CDATA[API Version 66.0]]></category>
		<category><![CDATA[Experimental Features]]></category>
		<category><![CDATA[Frontend Development]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lwc]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[salesforce developers]]></category>
		<category><![CDATA[Spring '26]]></category>
		<category><![CDATA[UI Logic]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206095</guid>
		<description><![CDATA[<p>Reduce boilerplate and streamline your code by writing JavaScript logic directly in your HTML templates. Build faster with less context switching between files.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions">Simplify Your LWC Development with Complex Template Expressions</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">Are you tired of jumping back and forth between your HTML and JavaScript files just to handle a simple conditional or format a string? We have some exciting news! In the </span><a href="https://www.salesforce.com/en-us/wp-content/uploads/sites/4/documents/release-notes/spring26-release-in-a-box.pdf"><span style="font-weight: 400">Spring ’26 release</span></a><span style="font-weight: 400"> (API version 66.0), we are introducing </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-components-html-expressions-use.html"><b>complex template expressions</b></a><span style="font-weight: 400"> for Lightning Web Components (LWC). This new experimental feature allows you to write JavaScript logic directly inside your HTML curly braces. In this post, we’ll talk about how this feature works, show you some common use cases, and walk through the rules for keeping your templates clean and performant.</span></p>
<h2><b>Why use complex expressions?</b></h2>
<p><span style="font-weight: 400">Until now, LWC templates only supported simple property binding. If you wanted to combine a first and last name, you had to create a </span><i><span style="font-weight: 400">getter</span></i><span style="font-weight: 400"> in your JavaScript class. While this keeps logic separate, it often leads to </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/get-started-best-practices.html"><span style="font-weight: 400">&#8220;boilerplate&#8221; code</span></a><span style="font-weight: 400"> — extra lines of code that don&#8217;t do much but pass data around.</span></p>
<p><span style="font-weight: 400">With complex template expressions, you have the power to handle simple UI logic where it belongs: in the template. This makes your components easier to read and faster to build.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206099" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417153422/image1_3a2771-e1776465277667.png?w=1000" class="postimages" width="1000" height="558" alt="A side-by-side comparison showing a standard LWC with multiple getters versus an LWC using inline complex template expressions." />
			  </span>
			</p>
<h2><b>Getting started with the syntax</b></h2>
<p>To use this feature, your component must use <b>API version 66.0</b> or higher in its <code>js-meta.xml</code> file. Once enabled, you can start using a subset of JavaScript directly in your HTML. See <a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-version-components.html"><u>this guide</u></a> on component API versioning for more information.</p>
<h3><b>Logical and arithmetic operators</b></h3>
<p><span style="font-weight: 400">You can now perform math or logical checks right in the tag. For example, if you want to show a special badge only when an item count is high, you can do it like this:</span></p>
<pre language="html"> 
&lt;template&gt; 
&lt;template&gt;&lt;div key=&quot;{item.id}&quot;&gt; 
&lt;span class=&quot;”{index&quot; 0=&quot;&quot; first-item=&quot;&quot; :=&quot;&quot; item=&quot;&quot;&gt;{index + 1}. {item.label}&lt;/span&gt; 
&lt;/div&gt;&lt;p&gt; 
&lt;/p&gt;&lt;/template&gt; 
&lt;/template&gt;
</pre>
<h2><b>Using expressions in attributes</b></h2>
<p><span style="font-weight: 400">One of the most powerful ways to use this feature is inside HTML attributes. You can </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-components-css-intro.html"><span style="font-weight: 400">dynamically change classes</span></a><span style="font-weight: 400"> or titles without needing extra variables in your JavaScript file.</span></p>
<p><span style="font-weight: 400">However, there is one very important rule to consider: </span><b>complex template expressions in attributes must be surrounded by double quotes.</b><span style="font-weight: 400"> If you forget the quotes, the LWC compiler will throw an error. By using quotes, you ensure that the template stays compliant with standard HTML rules.</span></p>
<pre language="html"> 
&lt;template&gt;&lt;div class=&quot;{isActive ? 'brand-border' : 'neutral-border'}&quot;&gt; User Profile &lt;/div&gt;&lt;p&gt;
&lt;button title=&quot;{item.name + ' - ' + item.status}&quot;&gt; View Details &lt;/button&gt; 
&lt;/p&gt;&lt;/template&gt; 
</pre>
<h2><b>Staying HTML compliant</b></h2>
<p><span style="font-weight: 400">Because LWC templates are still HTML files, some JavaScript characters can confuse the browser. For example, the </span><i><span style="font-weight: 400">less than</span></i><span style="font-weight: 400"> symbol ( &lt; ) looks like the start of a new HTML tag if used in plain text. To stay safe, follow these tips:</span></p>
<ul>
<li><b>Use Greater Than:</b> Instead of <code>{age &lt; 18}</code>, use <code>{18 &gt; age}</code>.</li>
<li><b>Stick to Double Quotes:</b> Always wrap attribute expressions in <code>"{...}"</code>.</li>
</ul>
<h2><b>LWC complex template expression limitations and restrictions</b></h2>
<p>To keep your components fast, we’ve limited what you can do in a template. You cannot use the <code>new</code> keyword, you cannot create full function declarations, and you cannot use assignment operators like <code>=</code> or <code>++</code>. Think of template expressions as read-only logic meant for displaying data.</p>
<p><span style="font-weight: 400">For a full set of valid and invalid expressions, see </span><a href="https://github.com/salesforce/lwc/tree/master/packages/%40lwc/template-compiler/src/__tests__/fixtures/expression-complex"><span style="font-weight: 400">these examples</span></a><span style="font-weight: 400">.</span></p>
<h2><b>Conclusion</b></h2>
<p><span style="font-weight: 400">Complex template expressions are a huge win for developer productivity. By reducing the need for additional getters and functions in your JavaScript files, we’re making LWC feel more modern and intuitive. Remember, this is currently an </span><b>experimental</b><span style="font-weight: 400"> feature. We encourage you to try it out in your Spring &#8217;26 sandbox environments and share your feedback with us!</span></p>
<h2><b>Resources</b></h2>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">Learn more about</span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-components-html-expressions.html"><span style="font-weight: 400"> how to work with complex template expressions</span></a><span style="font-weight: 400"> in the LWC Developer Guide.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Review the</span><a href="https://help.salesforce.com/s/articleView?id=release-notes.salesforce_release_notes.htm"> <span style="font-weight: 400">Spring &#8217;26 Release Notes</span></a><span style="font-weight: 400"> for full details on API version 66.0.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Practice your skills by completing the</span><a href="https://trailhead.salesforce.com/content/learn/projects/quick-start-lightning-web-components"> <span style="font-weight: 400">Build Lightning Web Components project</span></a><span style="font-weight: 400"> on Trailhead.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Brush-up on component </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-version-components.html"><span style="font-weight: 400">API versioning</span></a></li>
</ul>
<h2><b>About the Author</b></h2>
<p><b>John Hefferman</b><span style="font-weight: 400"> is a Software Engineer at Salesforce. John enjoys helping developers build faster and more efficiently on the Salesforce Platform.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions">Simplify Your LWC Development with Complex Template Expressions</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206095</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260417154035/Generic-A-2-e1776465653312.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260417154035/Generic-A-2-e1776465653312.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Salesforce Hosted MCP Server 使い始め</title>
		<link>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-server-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-server-jp#respond</comments>
		<pubDate>Sat, 18 Apr 2026 01:26:09 +0000</pubDate>
		<dc:creator><![CDATA[Hiroyuki Inaba]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Salesforce Hosted MCP]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206107</guid>
		<description><![CDATA[<p>Salesforce Hosted MCP Server&#12391;&#29983;&#25104;AI&#12456;&#12540;&#12472;&#12455;&#12531;&#12488;&#12363;&#12425;Salesforce&#12487;&#12540;&#12479;&#12395;&#23433;&#20840;&#12395;&#12450;&#12463;&#12475;&#12473;&#12290;&#22806;&#37096;&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;&#12450;&#12503;&#12522;&#12398;&#20316;&#25104;&#12289;MCP Server&#12398;&#26377;&#21177;&#21270;&#12289;&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;&#35373;&#23450;&#12414;&#12391;&#21021;&#26399;&#12475;&#12483;&#12488;&#12450;&#12483;&#12503;&#12434;&#30011;&#20687;&#20184;&#12365;&#12391;&#35299;&#35500;&#12375;&#12414;&#12377;&#12290;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-server-jp">Salesforce Hosted MCP Server 使い始め</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>みなさん、こんにちは！</p>
<p>Salesforce Hosted MCP Server は、AIエージェントが Salesforce データと自動化機能に安全かつ管理された方法でアクセスできるプラットフォームを提供します。Claude、ChatGPT、Cursor などの MCP に対応するクライアントから、Salesforce に接続できるようになります。</p>
<p>この記事では、Hosted MCP Server の初期セットアップ方法について、外部クライアントアプリケーションの作成から MCP Server の有効化、そしてクライアントからの試行までを順に解説します。</p>
<p>免責事項: この記事は 2026年4月16日時点の情報で作成しています。その後の更新や機能追加により画面や操作ステップが変更になっている場合もあります。あらかじめご了承ください。</p>
<p>参考</p>
<ul>
<li><a href="https://www.google.com/url?q=https://developer.salesforce.com/docs/platform/hosted-mcp-servers/overview&amp;sa=D&amp;source=editors&amp;ust=1776477394814930&amp;usg=AOvVaw0OV9cRFsMS8k_PCs0lfBj-">Salesforce Hosted MCP Servers</a></li>
</ul>
<h2>設定の流れ</h2>
<ol>
<li>外部クライアントアプリケーションを作成</li>
<li>使いたい MCP Server を有効化</li>
<li>クライアント側での設定追加・有効化</li>
</ol>
<p>今回は Developer Edition &amp; システム管理者での操作で解説します。</p>
<h2>外部クライアントアプリケーションを作成</h2>
<p>まずは、MCP クライアントからのアクセスを Salesforce で認証・認可できるように外部クライアントアプリケーションを作成します。</p>
<ul>
<li>設定 -&gt; アプリケーション -&gt; 外部クライアントアプリケーション -&gt; 外部クライアントアプリケーションマネージャー</li>
<li>「新規外部クライアントアプリケーション」ボタンを押す</li>
</ul>
<p>&nbsp;</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206130" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182323/jpblog-hosted-mcp-server-01.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>必要情報を入力します。</p>
<ul>
<li>外部クライアントアプリケーション名:
<ul>
<li>(任意の名前)</li>
</ul>
</li>
<li>API 参照名:
<ul>
<li>(任意の名前)</li>
</ul>
</li>
<li>取引先責任者メール:
<ul>
<li>(管理者のメールアドレス)</li>
</ul>
</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206129" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182319/jpblog-hosted-mcp-server-02.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>そのまま少し画面を下げます。</p>
<ul>
<li>OAuth を有効化:
<ul>
<li>チェックを入れる</li>
</ul>
</li>
<li>コールバック URL:
<ul>
<li> 使用するクライアントアプリに応じて適切なものを設定</li>
<li>画像例では localhost にしているが、Claude Desktop で使う場合は「https://claude.ai/api/mcp/auth_callback」にするなど</li>
<li>参考: <a href="https://www.google.com/url?q=https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/create-external-client-app.html%23steps-to-create-an-external-client-app&amp;sa=D&amp;source=editors&amp;ust=1776477394818326&amp;usg=AOvVaw1DZlsS30VXEdpsjTI70Ji3">Steps to Create an External Client App</a></li>
</ul>
</li>
<li>OAuth 範囲:
<ul>
<li> 次の二つを選択
<ul>
<li>いつでも要求を実行(refresh_token, offline_access)</li>
<li>Salesforce でホストされている MCP サーバーにアクセス (mcp_api)</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206128" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182316/jpblog-hosted-mcp-server-03.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>そのまま少し画面を下げます。</p>
<ul>
<li>セキュリティ: 次の二つのみを選択
<ul>
<li>サポートされる認証フローに Proof Key for Code Exchange (PKCE) 拡張を要求</li>
<li>指名ユーザーの JSON Web トークン (JWT) ベースのアクセストークンを発行</li>
</ul>
</li>
<li>「作成」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206127" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182313/jpblog-hosted-mcp-server-04.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>「設定」タブに切り替え</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206126" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182310/jpblog-hosted-mcp-server-05.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>そのまま画面を少し下げます。</p>
<ul>
<li>OAuth 設定のアコーディオンを開く</li>
<li>「コンシューマー鍵と秘密」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206125" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182307/jpblog-hosted-mcp-server-06.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>メールで送られてくる確認コードを入力</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206124" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182301/jpblog-hosted-mcp-server-07.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>コンシューマー鍵をコピーしておく</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206123" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182258/jpblog-hosted-mcp-server-08.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>以上で外部クライアントアプリケーションの作成は完了です。</p>
<h2>使いたい MCP サーバーを有効化</h2>
<p>提供する機能によってサーバーが分かれています。ここでは「sobject-reads」を有効化して使用できるようにします。</p>
<ul>
<li>設定 -&gt; インテグレーション -&gt; API カタログ -&gt; MCP サーバー</li>
<li>一覧から「sobject-reads」の名前のリンクを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206122" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182255/jpblog-hosted-mcp-server-09.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>画面右上「有効化」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206121" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182249/jpblog-hosted-mcp-server-10.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>サーバー状態が「稼働中」に変われば有効化が完了です。また、ツールタブから、実際にこの MCP サーバーが提供しているツール(機能)の一覧を確認できます。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206120" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182246/jpblog-hosted-mcp-server-11.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>以上で MCP サーバーの有効化は完了です。</p>
<p>ちなみにこの機能で面白いところは、カスタムの MCP サーバーを作成し、フローや Apex をツールとして登録、クライアントとなる生成 AI アプリやエージェントから自然言語で呼び出せるようになる点です。もちろん、皆さんが作ったフローや Apex も対象で、ノーコードでクライアントから呼び出せるようにすることができます。</p>
<h2>クライアント側での設定追加・有効化</h2>
<p>ここでは Claude Desktop アプリでの設定を例に見てみましょう。</p>
<p>注意: ここからは他社プロダクトになります。画面表示や操作パスは予告なく変更になる場合がありますので、必ずお使いになるプロダクトの最新情報をご確認ください。</p>
<ul>
<li>カスタマイズ -&gt; コネクタ -&gt; 「+(追加ボタン)」 -&gt; 「カスタムコネクタを追加」を押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206119" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182239/jpblog-hosted-mcp-server-12.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>必要事項を入力します。</p>
<ul>
<li>コネクタ名は任意のもので良い</li>
<li>URL は Salesforce の設定画面にある MCP サーバーの Server URL を指定</li>
<li>詳細設定を開き、OAuth のクライアント ID のみを設定</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206118" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182236/jpblog-hosted-mcp-server-13.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206117" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182233/jpblog-hosted-mcp-server-14.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>「連携/連携させる」ボタンを押す。</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206116" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182231/jpblog-hosted-mcp-server-15.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<ul>
<li>ブラウザが開くので連携で使うユーザーを選ぶ</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206115" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182228/jpblog-hosted-mcp-server-16.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>内容を確認し「許可」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206114" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182224/jpblog-hosted-mcp-server-17.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>次のような画面になれば成功です。</p>
<ul>
<li>「デスクトップアプリを開く」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206113" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182220/jpblog-hosted-mcp-server-18.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>ツールの一覧が見えてくれば接続も無事できています。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206112" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182218/jpblog-hosted-mcp-server-19.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>以上でクライアント側の設定は完了です。クライアントによって設定の仕方が異なりますので、それぞれの設定の仕方をご確認ください。</p>
<h2>動作検証</h2>
<p>それでは動作検証をしてみましょう。先ほど設定した Claude Desktop で会話してみます。</p>
<ul>
<li>「こんにちは！Salesforce にアクセスして、取引先の一覧を見せて」</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206111" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182214/jpblog-hosted-mcp-server-20.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>次のように回答が返ってくれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206110" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182210/jpblog-hosted-mcp-server-21.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206109" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182206/jpblog-hosted-mcp-server-22.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>違う聞き方もしてみましょう。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206108" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182158/jpblog-hosted-mcp-server-23.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<h2>おわりに</h2>
<p>この記事では、Salesforce Hosted MCP Server の初期セットアップから使い始めるまでの流れについて解説しました。</p>
<p>これまで、生成 AI アプリ・エージェントなどから Salesforce のデータにアクセスするためには、独自の API アクセスラッパーのようなものを構築する必要がありましたが、Hosted MCP Server を使えば、一度設定するだけで複数の MCP 対応クライアントから Salesforce にアクセスできるようになります。フィールドレベルセキュリティや共有ルールも尊重されるため、安全に AI エージェントを活用できます。</p>
<p>ぜひ、Developer Edition で Hosted MCP Server を試してみてください。AI エージェントと Salesforce の連携により、新しい可能性が広がります！</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-server-jp">Salesforce Hosted MCP Server 使い始め</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-server-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206107</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260417183656/blog_salesforce_hosted_mcp_server_%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81.png?w=1200" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260417183656/blog_salesforce_hosted_mcp_server_%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81.png?w=1200" medium="image" />
	</item>
		<item>
		<title>Lightning MiniHack Live 予選実装要件: 予算超過を打破せよ！緊急承認ロジックの実装</title>
		<link>https://developer.salesforce.com/blogs/2026/04/lightning-minihack-live-2026-qualifiers-implementation-task-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/lightning-minihack-live-2026-qualifiers-implementation-task-jp#respond</comments>
		<pubDate>Thu, 16 Apr 2026 23:00:24 +0000</pubDate>
		<dc:creator><![CDATA[Hiroyuki Inaba]]></dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[mini hack]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206035</guid>
		<description><![CDATA[<p>&#23455;&#35013;&#12398;&#27491;&#30906;&#24615;&#12384;&#12369;&#12391;&#28961;&#12367;&#12473;&#12500;&#12540;&#12489;&#12418;&#37325;&#35201;&#12394; Lightning MiniHack Live&#12290;&#20104;&#36984;&#12398;&#23455;&#35013;&#35201;&#20214;&#12399;&#12300;&#20104;&#31639;&#36229;&#36942;&#12434;&#25171;&#30772;&#12379;&#12424;&#65281;&#32202;&#24613;&#25215;&#35469;&#12525;&#12472;&#12483;&#12463;&#12398;&#23455;&#35013;&#12301;&#12364;&#12486;&#12540;&#12510;&#12391;&#12377;&#12290;&#27491;&#30906;&#24615;&#12399;&#12418;&#12385;&#12429;&#12435;&#12289;&#26368;&#36895;&#12398;&#23455;&#35013;&#25163;&#27573;&#12399;&#12393;&#12428;&#12394;&#12398;&#12363;&#65311;&#12415;&#12394;&#12373;&#12414;&#12398;&#12450;&#12452;&#12487;&#12450;&#12539;&#38275;&#12365;&#12395;&#26399;&#24453;&#12391;&#12377;&#65281;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/lightning-minihack-live-2026-qualifiers-implementation-task-jp">Lightning MiniHack Live 予選実装要件: 予算超過を打破せよ！緊急承認ロジックの実装</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<h2 data-pm-slice="1 3 []">ビジネスシナリオ</h2>
<p>株式会社アストロ・エンタープライズ(架空の会社名)では、各プロジェクトの経費管理を Salesforce 上で行っています。通常、プロジェクト予算は厳格に管理されており、予算残高がマイナスになるような経費の支出はシステムでブロックする必要があります。 しかし、現場からは「災害時や緊急トラブル対応時には、承認を待たずに予算超過してでも経費を計上したい」という強い要望が出ています。</p>
<p>あなたはシステム管理者兼開発者として、この「原則禁止、ただし緊急時は例外」という柔軟かつ堅牢なロジックと、現場が使いやすい操作画面をゼロの状態から構築しなければなりません。</p>
<h2>更新履歴</h2>
<ol>
<li>2026/4/22: ロジックの実装手段について、当初の記載に縛られず、Salesforce の標準提供 &amp; 基盤上で動作するものであれば良いように修正</li>
<li>2026/4/21: カスタムオブジェクトへの項目作成で、項目の説明は実装時には入力不要である旨を追記</li>
</ol>
<h2>実装要件</h2>
<p>以下のコンポーネント作成から画面カスタマイズ、ロジック実装までのすべての工程を録画に含めてください。</p>
<h4>1. カスタムオブジェクトと項目の作成</h4>
<table>
<tbody>
<tr>
<th>オブジェクト</th>
<th>項目名 (表示名)</th>
<th>型</th>
<th>項目概要(実装時の説明への入力は不要)</th>
</tr>
<tr>
<td><strong>プロジェクト</strong> (<code>Project__c</code>)</td>
<td><strong>予算残高</strong> (<code>Budget__c</code>)</td>
<td>通貨 (18, 0)</td>
<td>プロジェクトの残り予算。</td>
</tr>
<tr>
<td><strong>経費</strong> (<code>Expense__c</code>)</td>
<td><strong>プロジェクト</strong> (<code>Project__c</code>)</td>
<td>主従関係 または 参照関係</td>
<td>親となるプロジェクト。参照関係の場合は必須項目とすること。</td>
</tr>
<tr>
<td></td>
<td><strong>金額</strong> (<code>Amount__c</code>)</td>
<td>通貨 (18, 0)</td>
<td>支出する金額。</td>
</tr>
<tr>
<td></td>
<td><strong>緊急フラグ</strong> (<code>Is_Emergency__c</code>)</td>
<td>チェックボックス</td>
<td>ON の場合、予算超過を許容する。</td>
</tr>
</tbody>
</table>
<p>※記載以外のオブジェクトや項目を作っても構いませんが、加点はされません。「録画提出の手順と完了定義」のステップ3 動作検証（証明操作）が記述通り完了すれば良し、とします。</p>
<h4>2. 画面カスタマイズ（UI/UX）</h4>
<ul>
<li><strong>プロジェクトのレコード詳細画面</strong>:
<ul>
<li>関連リストとして「経費」オブジェクトが表示されるように設定してください。</li>
<li>関連リストには「経費名」「金額」「緊急フラグ」の各項目が表示されている必要があります。</li>
<li><strong>重要:</strong> プロジェクトのレコード詳細と関連リストは、タブの切り替えではなく、同一ページ内に同時に表示されるように配置してください。</li>
</ul>
</li>
</ul>
<h4>3. 予算超過の制御ロジック（基本ルール）</h4>
<ul>
<li><strong>目的</strong>: 通常時、プロジェクトの「予算残高」が 0 未満（マイナス）になるような保存を禁止する。</li>
<li><strong>エラーメッセージ</strong>: 「予算が不足しています。経費を計上できません。」</li>
<li><strong>実装手段</strong>: 数式、入力規則、フロー、または Apex トリガーなど Salesforce が標準で提供し基盤上で動作する機能を単独、もしくは必要に応じて組み合わせて実装。</li>
</ul>
<h4>4. 自動減算ロジックの実装</h4>
<ul>
<li><strong>内容</strong>: 経費レコードが作成された際、親プロジェクトの「予算残高」から経費の「金額」を差し引く。</li>
<li><strong>実装手段</strong>: 数式、入力規則、フロー、または Apex トリガーなど Salesforce が標準で提供し基盤上で動作する機能を単独、もしくは必要に応じて組み合わせて実装。今回はバルク更新を考慮せず画面操作での1件 &amp; 新規作成のみが対象で良い。</li>
</ul>
<h4>5. 緊急承認ロジック（例外要件）</h4>
<ul>
<li><strong>目的</strong>: 現場の緊急事態に柔軟に対応するため、特定の条件下で基本ルールをスキップさせる。</li>
<li><strong>要件</strong>: 経費レコードの「緊急フラグ」が <strong>ON</strong> の場合は、要件3で定義した「予算超過の制限」を無視し、予算残高がマイナスになっても正常に保存を完了させること。</li>
</ul>
<h2>録画提出の手順と完了定義</h2>
<p>以下の操作手順をすべて含む、開始から完了までは無編集の 1 本の画面操作録画を作成してください。</p>
<p>操作にあたっては禁止事項があります。(ブラウザのオートコンプリート禁止、事前に用意したコードのコピー&amp;ペースト禁止など)</p>
<p>詳しくは<a href="https://developer.salesforce.com/jpblogs/2026/04/lightning-minihack-live-2026-jp">イベント概要&amp;予選参加ガイド</a>「操作にあたっての制約」を参照してください。</p>
<h4>ステップ 1：開始確認</h4>
<ol>
<li>設定のホームを表示させた状態から録画を開始する。
<ul>
<li>Trailhead Playground で新規に取得した直後の状態</li>
<li>事前設定は表示言語が日本語以外の場合は日本語に変えることのみを可とする</li>
</ul>
</li>
</ol>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206037" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260413205610/lightning-minihack-live-implementation-start.jpeg?w=1538" class="postimages" width="1538" height="1000" alt="" />
			  </span>
			</p>
<p>※「設定のホーム」画面であれば表示内容に差異があっても良いです。</p>
<h4>ステップ 2：環境構築（実装操作）</h4>
<ol>
<li><strong>オブジェクト作成</strong>: 指定された 2 つのオブジェクトと項目を作成する。</li>
<li><strong>画面カスタマイズ</strong>: プロジェクトのレコードページを編集し、関連リストを配置する。</li>
<li><strong>ロジック実装</strong>: 「予算減算」「超過制御」「緊急例外」の各ロジックを実装・有効化する。</li>
</ol>
<h4>ステップ 3：動作検証（証明操作）</h4>
<ol>
<li><strong>テストデータの準備</strong>:
<ul>
<li>「プロジェクト」レコードを作成し、<strong>プロジェクト名: プロジェクト1</strong>、<strong>予算残高: 100,000</strong> と入力して保存する。</li>
</ul>
</li>
<li><strong>通常時のブロック確認（要件3の証明）</strong>:
<ul>
<li>関連リストから「経費」を新規作成する。</li>
<li><strong>経費名: 経費1</strong>、<strong>金額: 150,000</strong>、<strong>緊急フラグ: OFF</strong> で保存を試み、エラーメッセージが表示されることを示す。</li>
</ul>
</li>
<li><strong>緊急時の許可確認（要件5の証明）</strong>:
<ul>
<li>同じ入力画面のまま、<strong>緊急フラグ: ON</strong> に変更して保存し、成功することを示す。</li>
</ul>
</li>
<li><strong>最終結果の確認（要件2・4の証明）</strong>:
<ul>
<li>親の「プロジェクト」レコード詳細画面で、予算残高が <strong>-50,000</strong> になり、かつ関連リストに経費が表示されていること、レコードの項目として経費名、金額、緊急フラグが表示されていることを示す。</li>
</ul>
</li>
</ol>
<ul>
<li style="list-style-type: none">
<ul></ul>
</li>
</ul>
<h4>ステップ 4：終了確認</h4>
<ol>
<li>ステップ3-4操作完了時の画面で、録画を終了する。</li>
</ol>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206038" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260413205641/lightning-minihack-live-implementation-finish.jpeg?w=1538" class="postimages" width="1538" height="1000" alt="" />
			  </span>
			</p>
<p>※アプリケーションがセールスである必要はありません。</p>
<h2>お問い合わせ</h2>
<p>実装要件や録画方法について不明点や質問がありましたら<a href="https://developer.salesforce.com/jpblogs/2026/04/lightning-minihack-live-2026-jp">イベント概要&amp;予選参加ガイド</a>をご確認の上、コミュニケーション用の Slack ワークスペースの指定のチャンネルでお尋ねください。</p>
<p>Happy Hacking!</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/lightning-minihack-live-2026-qualifiers-implementation-task-jp">Lightning MiniHack Live 予選実装要件: 予算超過を打破せよ！緊急承認ロジックの実装</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/lightning-minihack-live-2026-qualifiers-implementation-task-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206035</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260413210340/lightning-minihack-live-qualifiers-implementation-task-blog-feature.png?w=1200" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260413210340/lightning-minihack-live-qualifiers-implementation-task-blog-feature.png?w=1200" medium="image" />
	</item>
		<item>
		<title>Performance-First Apex Development with ApexGuru in Salesforce DX MCP Server</title>
		<link>https://developer.salesforce.com/blogs/2026/04/performance-first-apex-development-with-apexguru-in-salesforce-dx-mcp-server</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/performance-first-apex-development-with-apexguru-in-salesforce-dx-mcp-server#respond</comments>
		<pubDate>Thu, 16 Apr 2026 08:00:20 +0000</pubDate>
		<dc:creator><![CDATA[Mayuresh Verma]]></dc:creator>
				<category><![CDATA[Agentforce Vibes]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[APIs and Integrations]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Agentic DX]]></category>
		<category><![CDATA[Apex Performance]]></category>
		<category><![CDATA[ApexGuru]]></category>
		<category><![CDATA[Code Analyzer]]></category>
		<category><![CDATA[developer tooling]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Model context protocol]]></category>
		<category><![CDATA[Salesforce DX MCP Server]]></category>
		<category><![CDATA[Scale Products]]></category>
		<category><![CDATA[Shift-Left]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[Vibe Coding]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206079</guid>
		<description><![CDATA[<p>Shift your performance analysis left with ApexGuru and the Salesforce DX MCP Server. Now, you can catch and fix costly Apex bottlenecks directly in your IDE before you ever hit deploy.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/performance-first-apex-development-with-apexguru-in-salesforce-dx-mcp-server">Performance-First Apex Development with ApexGuru in Salesforce DX MCP Server</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">What if performance analysis started before deployment instead of after it? That is the shift </span><a href="https://help.salesforce.com/s/articleView?language=en_US&amp;id=xcloud.apexguru_overview.htm&amp;type=5"><span style="font-weight: 400">ApexGuru</span></a><span style="font-weight: 400"> now enables through the </span><a href="https://github.com/salesforcecli/mcp/blob/main/packages/mcp-provider-scale-products/README.md"><span style="font-weight: 400">Salesforce DX MCP Server</span></a><span style="font-weight: 400">. (</span><i><span style="font-weight: 400">Model Context Protocol, or MCP, </span></i><span style="font-weight: 400">serves as an interface between AI assistants and external data sources.) ApexGuru is the Salesforce AI-powered capability for identifying and helping you fix performance-related issues in your code. If you’ve read our earlier posts on </span><a href="https://developer.salesforce.com/blogs/2025/06/the-apexguru-ai-engine-explained"><span style="font-weight: 400">specialized AI models</span></a><span style="font-weight: 400"> and </span><a href="https://developer.salesforce.com/blogs/2025/06/the-apexguru-ai-engine-explained"><span style="font-weight: 400">agentic code fixing</span></a><span style="font-weight: 400">, this is the next step: </span><b>bringing ApexGuru performance analysis directly into the developer workflow in agentic IDEs and MCP-compatible clients so you can catch performance bottlenecks while the code is still in front of you</b><span style="font-weight: 400">. In this post, you’ll learn what ApexGuru adds to the agentic developer experience, why this changes the day-to-day Apex workflow, and how to start using it in your MCP client.</span></p>
<h2><span style="font-weight: 400">Why this matters to developers</span></h2>
<p><span style="font-weight: 400">Most teams treat performance analysis as a late-stage activity. Code gets written, reviewed, tested, and deployed, and only then do the costly problems show up: SOQL in loops, unbounded queries, expensive schema lookups, or queries that fetch more data than the code actually uses. By that point, fixing those issues often means rework, delay, and production cleanup.</span></p>
<p>ApexGuru changes that sequence. In the Agentic DX MCP workflow, performance analysis can happen in the same loop as writing code, reviewing code, and preparing changes for deployment. That means developers can catch issues before they become runtime incidents or technical debt. This is especially useful because ApexGuru is not just a generic static check. In Salesforce DX MCP Server, the <a href="https://github.com/salesforcecli/mcp?tab=readme-ov-file#scale-products-toolset"><u><code>scale-products</code><span> toolset</span></u></a><span> includes the GA tool </span><code>scan_apex_class_for_antipatterns</code>, which analyzes Apex classes for performance antipatterns and then returns detections grouped by severity along with fix guidance. When connected to an org where ApexGuru is enabled, the severity assessment can also reflect runtime-informed context rather than static structure alone.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206081" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260416120708/ApexGuru-runtime-data-and-performance-guidance-displayed-directly-in-the-IDE.png?w=817" class="postimages" width="817" height="643" alt="ApexGuru runtime data and performance guidance displayed directly in the IDE." />
			  </span>
			</p>
<h2><span style="font-weight: 400">From Code Analyzer to Salesforce DX MCP Server</span></h2>
<p><span style="font-weight: 400">The shift-left journey of ApexGuru did not start with MCP. It had already begun moving into the developer workflow through its integration with </span><a href="https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview"><span style="font-weight: 400">Code Analyzer</span></a><span style="font-weight: 400">, where developers could authorize an ApexGuru-enabled org and scan a selected Apex class directly from the editor for performance issues. Unlike Code Analyzer, however, ApexGuru itself is available only in Production and Full Copy Sandbox orgs for Unlimited, Enterprise, Professional, and Signature Editions.</span></p>
<p><a href="https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/analyze-vscode.html#scan-your-apex-code-for-performance-issues-using-apexguru"><span style="font-weight: 400">ApexGuru Insights in Code Analyzer</span></a><span style="font-weight: 400"> can still be surfaced in earlier-stage environments when ApexGuru has already been activated in Production or Full Copy Sandbox orgs. In practice, this allows developers to view ApexGuru Insights through Code Analyzer in Developer Sandbox, Partial Copy Sandbox, and Scratch Orgs where the Developer Hub is backed by a Production or Full Copy org. That brought ApexGuru from an app experience into an IDE-assisted workflow and extended performance analysis further left in the development lifecycle.</span></p>
<p><span style="font-weight: 400">Salesforce DX MCP Server builds on that foundation. ApexGuru first established a runtime-aware, specialized AI approach to detecting Apex performance antipatterns, then moved closer to the developer workflow through Code Analyzer integration in Visual Studio Code (VS Code). With DX MCP, ApexGuru takes the next step by expanding into broader MCP-based and agentic workflows across clients such as </span><a href="https://www.salesforce.com/agentforce/developers/vibe-coding/"><span style="font-weight: 400">Agentforce Vibes</span></a><span style="font-weight: 400">, Claude Code, Cursor, Cline, and other MCP-compatible developer environments. Code Analyzer brought ApexGuru into the IDE, while Salesforce DX MCP Server broadens its reach and makes ApexGuru available as part of a more flexible, agent-driven development experience.</span></p>
<h2><span style="font-weight: 400">What ApexGuru adds to Salesforce DX MCP Server</span></h2>
<p><span style="font-weight: 400">ApexGuru is especially useful in Salesforce DX MCP Server because it brings performance analysis into the same workflow where developers are already writing and reviewing code. A class can compile, pass tests, and still carry avoidable CPU cost, query inefficiency, or scalability risk. ApexGuru helps surface those issues earlier, before they turn into runtime incidents or costly cleanup later.</span></p>
<p><span style="font-weight: 400">With Salesforce DX MCP Server, the flow becomes much simpler. You write code, ask your MCP client to scan the class, review the antipatterns and severity, and apply the recommended fixes before you commit or deploy. Performance is no longer a separate destination. It becomes part of the development loop.</span></p>
<h2><span style="font-weight: 400">Designing performance guidance for agentic workflows</span></h2>
<p><span style="font-weight: 400">To truly empower an AI agent to act as a performance engineer, we had to move beyond simple API wrappers and design for </span><i><span style="font-weight: 400">context exchange</span></i><span style="font-weight: 400">. That is, we had to design for a workflow that combines local code context with org-side runtime context. The core challenge in bringing ApexGuru to agentic IDEs was bridging two completely different environments: the developer&#8217;s local machine (where the unsaved code lives) and the Salesforce org (where the runtime telemetry lives).</span></p>
<p><span style="font-weight: 400">To solve this, we mapped ApexGuru to the MCP as an executable tool within the Salesforce DX MCP Server. The Salesforce DX MCP Server runs locally, so it can inspect the developer’s file directly while also using </span><a href="https://developer.salesforce.com/tools/salesforcecli"><span style="font-weight: 400">Salesforce CLI</span></a><span style="font-weight: 400"> authentication to access org-side runtime context.</span></p>
<p>When an agent invokes the <code>scan_apex_class_for_antipatterns</code> tool, the invocation requires specific parameters: the <code>className</code> and the absolute <code>apexFilePath</code>. Behind the scenes, the tool does not rely on simple regular expressions; it utilizes Abstract Syntax Tree (AST) parsing to accurately analyze the local code&#8217;s syntax, tracking method context and loop depth.</p>
<p>The real magic happens when this local static analysis is combined with remote telemetry. The tool connects to your authorized org to see if the detected pattern (such as a <code>Schema.getGlobalDescribe()</code> call) is actually causing high CPU usage in a Production or a Full Copy Sandbox org. It then returns a JSON-structured payload to the agent containing the antipattern type, the runtime-informed severity level, the problematic code snippet, and explicit fix instructions. Because the output is structured, an MCP-compatible client can reliably summarize the finding, explain why it matters, and help display a potential fix in the editor.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206082" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260416120736/Sequence-diagram-showing-how-the-Scan-Apex-Class-for-Antipatterns-tool-works-e1776366470348.png?w=1000" class="postimages" width="1000" height="704" alt="Sequence diagram showing how the Scan Apex Class for Antipatterns tool works." />
			  </span>
			</p>
<p>To enable this agentic experience in an MCP-compatible client, simply define the Salesforce DX MCP Server in your configuration file and pass the <code>--toolsets scale-products</code> flag.</p>
<p><span style="font-weight: 400">Much more than a static scan wrapped in chat, ApexGuru in Salesforce DX MCP Server provides a way to bring local code analysis and org-aware prioritization into the same workflow, so developers can decide what to fix first while they are still coding.</span></p>
<h2><span style="font-weight: 400">What the experience looks like in practice</span></h2>
<p><span style="font-weight: 400">ApexGuru in Salesforce DX MCP Server does more than flag a pattern; it can show you runtime-informed findings directly in the coding surface. In the following two screenshots from Agentforce Vibes, the first scan view shows the detected antipatterns, their severity, and a short explanation of why each one matters. The second, deeper view expands the issue into a more detailed explanation with telemetry-backed reasoning, expected improvement after remediation, and the likely impact on performance and stability.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206083" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260416120812/ApexGuru-scan-results-inside-Agentforce-Vibes-showing-a-CRITICAL-severity-antipattern-its-description-and-runtime-metrics-including-8.4-of-App-CPU-during-peak-support-traffic.png?w=873" class="postimages" width="873" height="266" alt="ApexGuru scan results inside Agentforce Vibes showing a CRITICAL severity antipattern, its description, and runtime metrics, including “8.4% of App CPU during peak support traffic”." />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206084" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260416120855/Detailed-view-of-a-critical-ApexGuru-finding-showing-the-flagged-line-why-Schema.getGlobalDescribe-in-a-loop-is-costly-and-the-recommended-direct-SObject-type-fix.png?w=638" class="postimages" width="638" height="598" alt="Detailed view of a critical ApexGuru finding showing the flagged line, why Schema.getGlobalDescribe() in a loop is costly, and the recommended direct SObject type fix." />
			  </span>
			</p>
<p><span style="font-weight: 400">Whereas a traditional code check might tell you that something is risky, ApexGuru goes further by helping answer three more useful questions: why this issue hurts, why it matters in this org, and what the likely benefit is if you fix it now. That is what makes the developer experience feel closer to performance guidance than to using a simple linter.</span></p>
<p><span style="font-weight: 400">For example, if you are editing an Apex class that queries inside a loop or retrieves far more fields than the code actually uses, the code may still work functionally, but the pattern can become expensive as data volume grows. With </span><a href="https://github.com/salesforcecli/mcp/tree/main"><span style="font-weight: 400">ApexGuru in Salesforce DX MCP Server</span></a><span style="font-weight: 400">, you can ask your MCP client to scan the file for performance issues in your prompt; for example, “Scan the class for performance issues.&#8221;” A typical result includes a grouped antipattern type, a fix instruction, one or more detected instances, and severity for each instance.</span></p>
<h2><span style="font-weight: 400">Conclusion</span></h2>
<p><span style="font-weight: 400">Performance-first development is not just about catching issues earlier. It is about making performance review a natural part of how code gets written and refined. ApexGuru in Salesforce DX MCP Server moves performance analysis closer to the moment where developers can still act on it quickly. Instead of discovering costly bottlenecks after deployment, developers can now surface telemetry-backed findings while they are still coding, understand why those findings matter, and fix them before they become larger problems.</span></p>
<p><span style="font-weight: 400">That is the real promise of this integration. ApexGuru is no longer limited to a separate app surface or a single IDE extension flow. It is becoming part of a broader developer workflow where performance, code quality, and remediation come together in the same loop.</span></p>
<h2><span style="font-weight: 400">Resources</span></h2>
<ul>
<li style="font-weight: 400"><a href="https://help.salesforce.com/s/articleView?id=xcloud.apexguru_overview.htm&amp;type=5"><span style="font-weight: 400">Help documentation ApexGuru</span></a></li>
<li style="font-weight: 400"><a href="https://salesforce.vidyard.com/watch/9wrv1Nhuk3xntidbouDWpz"><span style="font-weight: 400">ApexGuru in DX MCP Server: Demo video </span></a></li>
<li style="font-weight: 400"><a href="https://github.com/salesforcecli/mcp/blob/main/packages/mcp-provider-scale-products/README.md"><span style="font-weight: 400">ApexGuru or Scale Products MCP README</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/blogs/2025/06/the-apexguru-ai-engine-explained"><span style="font-weight: 400">The ApexGuru AI Engine, Explained</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/blogs/2025/09/inside-apexguru-agentic-code-fixing"><span style="font-weight: 400">Inside ApexGuru: Agentic Code Fixing</span></a></li>
<li style="font-weight: 400"><a href="https://github.com/salesforcecli/mcp/tree/main"><span style="font-weight: 400">Salesforce DX MCP Server repository and tool documentation</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/blogs/2025/02/optimize-your-apex-for-apps-and-agentforce-with-apexguru"><span style="font-weight: 400">Optimize Your Apex for Apps and Agentforce with ApexGuru</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/analyze-vscode.html#scan-your-apex-code-for-performance-issues-using-apexguru"><span style="font-weight: 400">Code Analyzer VS Code extension documentation</span></a></li>
</ul>
<h2><span style="font-weight: 400">About the Authors</span></h2>
<p><b>Mayuresh Verma</b><span style="font-weight: 400"> is a Senior AI Product Manager at Salesforce working on the Scalability Products portfolio, including ApexGuru. Reach out to him on </span><a href="https://www.linkedin.com/in/mayuresh-verma/"><span style="font-weight: 400">Linkedin</span></a><span style="font-weight: 400">.</span></p>
<p><b>Samarth Arora</b><span style="font-weight: 400"> is a Member of Technical Staff at Salesforce working on ApexGuru. Reach out to him on </span><a href="https://www.linkedin.com/in/samarth-sfdc/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/performance-first-apex-development-with-apexguru-in-salesforce-dx-mcp-server">Performance-First Apex Development with ApexGuru in Salesforce DX MCP Server</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/performance-first-apex-development-with-apexguru-in-salesforce-dx-mcp-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206079</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260416121249/Generic-D-e1776366784247.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260416121249/Generic-D-e1776366784247.png?w=1000" medium="image" />
	</item>
	</channel>
</rss>
