{"id":1835,"date":"2026-09-22T11:04:47","date_gmt":"2026-09-22T11:04:47","guid":{"rendered":"https:\/\/www.hostingseekers.com\/how-to\/?p=1835"},"modified":"2026-09-22T11:04:47","modified_gmt":"2026-09-22T11:04:47","slug":"connect-and-use-laravel-with-an-mcp-server","status":"publish","type":"post","link":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/","title":{"rendered":"How to Connect and Use Laravel with an MCP Server?"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1881\" src=\"https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp\" alt=\"How to Connect and Use Laravel with an MCP Server\" width=\"1672\" height=\"941\" srcset=\"https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp 1672w, https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server-300x169.webp 300w, https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server-1024x576.webp 1024w, https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server-768x432.webp 768w, https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server-1536x864.webp 1536w\" sizes=\"auto, (max-width: 1672px) 100vw, 1672px\" \/><\/p>\n<h2>Introduction<\/h2>\n<p>By the end of this guide, you will have a working Laravel application that an AI client like Claude can talk to directly, not through a chatbot wrapper, but through actual function calls into your codebase. The Model Context Protocol, or MCP, is the open standard that makes this possible. Think of it as a common plug shape for AI: build a server once, and any MCP-compatible client can use it without you writing custom integration code for each one.<\/p>\n<p>You will need Laravel 12.x or 13.x, PHP 8.2 or higher, and Composer. Basic familiarity with Artisan commands and routing helps, but you don&#8217;t need to know anything about MCP going in.<\/p>\n<h2>What Is an MCP Server (And Why Connect It to Laravel)?<\/h2>\n<p>The Model Context Protocol gives AI models a structured way to interact with external applications instead of guessing at APIs or scraping text. An MCP server exposes three kinds of things to a connected AI client:<\/p>\n<ul>\n<li>Tools are actions the model can call, such as a tool that looks up a customer&#8217;s order status.<\/li>\n<li>Resources are read-only data the model can pull in as context, like a document of shipping policies.<\/li>\n<li>Prompts are reusable templates that structure how the model should approach a task, such as a template for drafting a support reply in a specific tone.<\/li>\n<\/ul>\n<p>Put together, an AI client talks to your MCP server, and your server talks to whatever your Laravel app already knows how to talk to: your database, your queues, your third-party APIs.<\/p>\n<p>Why bother building this in Laravel specifically, instead of a bare-bones MCP server in plain PHP or Node? Because the package folds MCP&#8217;s plumbing into patterns Laravel developers already know. Defining a server, a tool, or a prompt read like defining a controller or a job, not like implementing a protocol spec by hand. You get Artisan scaffolding, automatic dependency injection through Laravel&#8217;s service container, Laravel&#8217;s own validation rules, and built-in support for Sanctum and OAuth 2.1 authentication.<\/p>\n<h2>Prerequisites<\/h2>\n<p>Before starting, make sure you have:<\/p>\n<ul>\n<li>Laravel 12.x or 13.x<\/li>\n<li>PHP 8.2 or higher<\/li>\n<li>Composer<\/li>\n<li>An MCP-compatible client for testing, such as Claude Desktop, or you can rely on the built-in inspector tool covered later<\/li>\n<\/ul>\n<p>A local development environment is all you need to follow along here. The production and hosting requirements are covered near the end.<\/p>\n<h2>Step 1: Install the Laravel MCP Package<\/h2>\n<p>Pull the package in through Composer:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">composer require laravel\/mcp<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>Then publish the routes file:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">php artisan vendor:publish &#8211;tag=ai-routes<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>That second command drops a fresh routes\/ai.php file into your routes folder. This is the file where every MCP server you build from here on gets registered, it doesn&#8217;t touch web.php or api.php at all. It&#8217;s worth pausing on why this lives separately from web.php and api.php. MCP traffic is a distinct surface with its own protocol expectations and its own auth story, so keeping it in its own file avoids tangling MCP routing logic with your normal HTTP routes.<\/p>\n<h2>Step 2: Create Your First MCP Server<\/h2>\n<p>Scaffold a server with Artisan:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">php artisan make:mcp-server WeatherServer<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>This creates a new server class in the app\/Mcp\/Servers directory. The generated server class extends Laravel MCP&#8217;s base Laravel\\Mcp\\Server class and provides attributes and properties for configuring the server and registering tools, resources, and prompts:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">&lt;?php<br \/>\nnamespace App\\Mcp\\Servers;<br \/>\nuse Laravel\\Mcp\\Server\\Attributes\\Instructions;<br \/>\nuse Laravel\\Mcp\\Server\\Attributes\\Name;<br \/>\nuse Laravel\\Mcp\\Server\\Attributes\\Version;<br \/>\nuse Laravel\\Mcp\\Server;<br \/>\n#[Name(&#8216;Weather Server&#8217;)]<br \/>\n#[Version(&#8216;1.0.0&#8217;)]<br \/>\n#[Instructions(&#8216;This server provides weather information and forecasts.&#8217;)]<br \/>\nclass WeatherServer extends Server<br \/>\n{<br \/>\nprotected array $tools = [<br \/>\n\/\/ GetCurrentWeatherTool::class,<br \/>\n];<br \/>\nprotected array $resources = [<br \/>\n\/\/ WeatherGuidelinesResource::class,<br \/>\n];<br \/>\nprotected array $prompts = [<br \/>\n\/\/ DescribeWeatherPrompt::class,<br \/>\n];<br \/>\n}<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>The #[Instructions] attribute deserves a second look. This is what the AI client reads to understand how your server as a whole should be used, so it&#8217;s worth writing something specific rather than a placeholder. A vague instruction like &#8220;this server does weather stuff&#8221; gives the model almost nothing to work with when it decides whether to reach for your server at all.<\/p>\n<h2>Step 3: Register the Server in routes\/ai.php<\/h2>\n<p>Laravel MCP gives you two ways to register a server, and picking the right one matters more than it might seem at first glance.<\/p>\n<p>For a server that a remote AI client will reach over HTTP, use Mcp::web():<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">use App\\Mcp\\Servers\\WeatherServer;<br \/>\nuse Laravel\\Mcp\\Facades\\Mcp;<br \/>\nMcp::web(&#8216;\/mcp\/weather&#8217;, WeatherServer::class);<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>This is what you will reach for in almost every production setup, since it puts your server behind a normal URL that any client on the network can hit with a POST request.<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">Mcp::web(&#8216;\/mcp\/weather&#8217;, WeatherServer::class)<br \/>\n-&gt;middleware([&#8216;throttle:mcp&#8217;]);<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>For local tooling that runs on your own machine, such as integrating with an AI coding assistant during development, use Mcp::local() instead:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">Mcp::local(&#8216;weather&#8217;, WeatherServer::class);<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>Rather than sitting behind a URL, it runs as an Artisan command your machine starts directly, which is exactly the setup something like <a href=\"https:\/\/www.hostingseekers.com\/blog\/ai-powered-laravel-boost-smarter-code-smarter-apps\/\">Laravel Boost<\/a> relies on for local AI assistant integrations.<\/p>\n<p>The rule of thumb: if the client and server live on the same machine and there&#8217;s no network hop involved, go local. If a hosted AI client needs to reach your app over the internet, go web, and put real thought into the auth on that route since it&#8217;s an entry point into your application.<\/p>\n<h2>Step 4: Build a Tool the AI Can Call<\/h2>\n<p>This is where the actual work happens. Scaffold a tool:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">php artisan make:mcp-tool CurrentWeatherTool<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>Here&#8217;s what the finished tool looks like, following the official example closely:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">&lt;?php<br \/>\nnamespace App\\Mcp\\Tools;<br \/>\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;<br \/>\nuse Laravel\\Mcp\\Request;<br \/>\nuse Laravel\\Mcp\\Response;<br \/>\nuse Laravel\\Mcp\\Server\\Attributes\\Description;<br \/>\nuse Laravel\\Mcp\\Server\\Tool;<br \/>\n#[Description(&#8216;Fetches the current weather forecast for a specified location.&#8217;)]<br \/>\nclass CurrentWeatherTool extends Tool<br \/>\n{<br \/>\n\/**<br \/>\n* Handle the tool request.<br \/>\n*\/<br \/>\npublic function handle(Request $request): Response<br \/>\n{<br \/>\n$location = $request-&gt;get(&#8216;location&#8217;);<br \/>\n\/\/ Get weather&#8230;<br \/>\nreturn Response::text(&#8216;The weather is&#8230;&#8217;);<br \/>\n}<br \/>\n\/**<br \/>\n* Get the tool&#8217;s input schema.<br \/>\n*<br \/>\n* @return array&lt;string, \\Illuminate\\JsonSchema\\Types\\Type&gt;<br \/>\n*\/<br \/>\npublic function schema(JsonSchema $schema): array<br \/>\n{<br \/>\nreturn [<br \/>\n&#8216;location&#8217; =&gt; $schema-&gt;string()<br \/>\n-&gt;description(&#8216;The location to get the weather for.&#8217;)<br \/>\n-&gt;required(),<br \/>\n];<br \/>\n}<br \/>\n}<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>There&#8217;s a piece of advice worth calling out on its own, because it&#8217;s the single most common mistake developers make with MCP tools.<\/p>\n<p>The description isn&#8217;t documentation. It&#8217;s the interface. The model reads #[Description] and each field&#8217;s -&gt;description() call to decide whether and how to call your tool. Laravel won&#8217;t generate one for you, and skipping it or leaving it generic is the fastest way to end up with a tool the model either ignores or calls wrong. Write it the way you&#8217;d explain the tool to a new teammate in one sentence.<\/p>\n<p>Register the tool on your server:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">&lt;?php<br \/>\nnamespace App\\Mcp\\Servers;<br \/>\nuse App\\Mcp\\Tools\\CurrentWeatherTool;<br \/>\nuse App\\Mcp\\Tools\\HistoricalWeatherTool;<br \/>\nuse App\\Mcp\\Tools\\WeatherAlertsTool;<br \/>\nuse Laravel\\Mcp\\Server;<br \/>\nuse Laravel\\Mcp\\Server\\Tools\\ToolSearch;<br \/>\nclass WeatherServer extends Server<br \/>\n{<br \/>\n\/**<br \/>\n* The tools registered with this MCP server.<br \/>\n*<br \/>\n* @var array&lt;int|string, \\Laravel\\Mcp\\Server\\Tool|class-string&lt;\\Laravel\\Mcp\\Server\\Tool&gt;|array&lt;int, \\Laravel\\Mcp\\Server\\Tool|class-string&lt;\\Laravel\\Mcp\\Server\\Tool&gt;&gt;&gt;<br \/>\n*\/<br \/>\nprotected array $tools = [<br \/>\nCurrentWeatherTool::class,<br \/>\nToolSearch::class =&gt; [<br \/>\nHistoricalWeatherTool::class,<br \/>\nWeatherAlertsTool::class,<br \/>\n],<br \/>\n];<br \/>\n}<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>You can also mark tools with safety annotations that tell the AI client something about their behaviour:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">namespace App\\Mcp\\Tools;<br \/>\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;<br \/>\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsReadOnly;<br \/>\nuse Laravel\\Mcp\\Server\\Tool;<br \/>\n#[IsIdempotent]<br \/>\n#[IsReadOnly]<br \/>\nclass CurrentWeatherTool extends Tool<br \/>\n{<br \/>\n\/\/<br \/>\n}<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>Four annotations are available, and they matter more than they might look. IsReadOnly tells the client the tool won&#8217;t modify the environment. IsDestructive flags a tool capable of deleting or overwriting data, which is worth being upfront about rather than letting a client find out the hard way. IsIdempotent says calling it twice with the same input changes nothing the second time. IsOpenWorld signals the tool reaches out to something external, like a third-party API, where results can vary. If you are building a tool that deletes records or sends emails, marking it destructive isn&#8217;t just good practice, it changes how cautious some clients will be about invoking it without confirmation.<\/p>\n<p>One more thing that&#8217;s easy to miss: dependency injection works the same way it does everywhere else in Laravel. You can type-hint a repository or service in the tool&#8217;s constructor or directly in handle( ).<\/p>\n<h2>Step 5: Add Resources and Prompts (Optional but Useful)<\/h2>\n<p>Resources and prompts round out what a server can offer, though most projects lean much harder on tools.<\/p>\n<p>A resource exposes read-only data:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">&lt;?php<br \/>\nnamespace App\\Mcp\\Resources;<br \/>\nuse Laravel\\Mcp\\Request;<br \/>\nuse Laravel\\Mcp\\Response;<br \/>\nuse Laravel\\Mcp\\Server\\Attributes\\Description;<br \/>\nuse Laravel\\Mcp\\Server\\Attributes\\MimeType;<br \/>\nuse Laravel\\Mcp\\Server\\Contracts\\HasUriTemplate;<br \/>\nuse Laravel\\Mcp\\Server\\Resource;<br \/>\nuse Laravel\\Mcp\\Support\\UriTemplate;<br \/>\n#[Description(&#8216;Access user files by ID&#8217;)]<br \/>\n#[MimeType(&#8216;text\/plain&#8217;)]<br \/>\nclass UserFileResource extends Resource implements HasUriTemplate<br \/>\n{<br \/>\n\/**<br \/>\n* Get the URI template for this resource.<br \/>\n*\/<br \/>\npublic function uriTemplate(): UriTemplate<br \/>\n{<br \/>\nreturn new UriTemplate(&#8216;file:\/\/users\/{userId}\/files\/{fileId}&#8217;);<br \/>\n}<br \/>\n\/**<br \/>\n* Handle the resource request.<br \/>\n*\/<br \/>\npublic function handle(Request $request): Response<br \/>\n{<br \/>\n$userId = $request-&gt;get(&#8216;userId&#8217;);<br \/>\n$fileId = $request-&gt;get(&#8216;fileId&#8217;);<br \/>\n\/\/ Fetch and return the file content&#8230;<br \/>\nreturn Response::text($content);<br \/>\n}<br \/>\n}<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>A prompt is a reusable template:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">&lt;?php<br \/>\nnamespace App\\Mcp\\Servers;<br \/>\nuse App\\Mcp\\Prompts\\DescribeWeatherPrompt;<br \/>\nuse Laravel\\Mcp\\Server;<br \/>\nclass WeatherServer extends Server<br \/>\n{<br \/>\n\/**<br \/>\n* The prompts registered with this MCP server.<br \/>\n*<br \/>\n* @var array&lt;int, class-string&lt;\\Laravel\\Mcp\\Server\\Prompt&gt;&gt;<br \/>\n*\/<br \/>\nprotected array $prompts = [<br \/>\nDescribeWeatherPrompt::class,<br \/>\n];<br \/>\n}<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>Both get registered on the server the same way tools do, through the $resources and $prompts arrays.<\/p>\n<h2>Step 6: Test Your MCP Server<\/h2>\n<p>Before wiring anything up to a live AI client, use the built-in inspector:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\"># For a web server registered at \/mcp\/weather<br \/>\nphp artisan mcp:inspector mcp\/weather<br \/>\n# For a local server registered under the name &#8220;weather&#8221;<br \/>\nphp artisan mcp:inspector weather<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>Running this opens an interactive session where you can see every tool, resource, and prompt your server exposes, check their schemas, and fire a test call by hand, all before a real AI client is anywhere near it. It also hands you the connection settings you&#8217;d paste into an actual client, so there&#8217;s no guessing at config values later.<\/p>\n<p>Beyond manual testing, write actual unit tests. This matters more here than it does for a typical controller, because a broken tool doesn&#8217;t throw a visible 500 error, it just fails quietly inside someone&#8217;s AI conversation, and the person on the other end has no idea why. Laravel MCP gives you a testing helper for exactly this:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">test(&#8216;tool&#8217;, function () {<br \/>\n$response = WeatherServer::tool(CurrentWeatherTool::class, [<br \/>\n&#8216;location&#8217; =&gt; &#8216;New York City&#8217;,<br \/>\n&#8216;units&#8217; =&gt; &#8216;fahrenheit&#8217;,<br \/>\n]);<br \/>\n$response<br \/>\n-&gt;assertOk()<br \/>\n-&gt;assertSee(&#8216;The current weather in New York City is 72\u00b0F and sunny.&#8217;);<br \/>\n});<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>assertOk() confirms nothing errored out. assertSee() checks the response body actually contains what you expected. Beyond those two, there&#8217;s assertHasErrors(), assertHasNoErrors(), and metadata checks like assertName() and assertDescription() if you want to pin down the tool&#8217;s public contract as tightly as its behaviour.<\/p>\n<h2>Step 7: Secure Your MCP Server for Production<\/h2>\n<p>An Mcp::web() route with no authentication is an unauthenticated remote entry point into your application logic. This step isn&#8217;t optional once you are past local testing.<\/p>\n<p>Laravel MCP gives you two supported paths to <a href=\"https:\/\/www.hostingseekers.com\/\/blog\/secure-your-business-website-with-the-best-laravel-security-practices\/\">secure the server<\/a>:<\/p>\n<p><b>OAuth 2.1:<\/b> Built on Laravel Passport, OAuth 2.1 is the one the protocol spec itself calls out, and it&#8217;s the option the widest range of MCP clients already know how to speak. That&#8217;s the whole reason to reach for Passport first if you are starting clean: it&#8217;s the path with the least friction against whatever client ends up connecting. Setting it up means registering the discovery routes and applying Passport&#8217;s middleware:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">use Laravel\\Mcp\\Facades\\Mcp;<br \/>\nMcp::oauthRoutes();<br \/>\nMcp::web(&#8216;\/mcp\/weather&#8217;, WeatherExample::class)<br \/>\n-&gt;middleware(&#8216;auth:api&#8217;);<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p><b>Sanctum:<\/b> It is the simpler option if your app doesn&#8217;t already lean on OAuth flows elsewhere. Sanctum is the more sensible pick if OAuth isn&#8217;t already part of your stack. Bolting Passport onto an app that&#8217;s built its auth around Sanctum is extra work for a payoff you may never need. Stick with Sanctum until a specific client actually forces the OAuth requirement on you, don&#8217;t add it preemptively.<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">Mcp::web(&#8216;\/mcp\/demo&#8217;, WeatherExample::class)<br \/>\n-&gt;middleware(&#8216;auth:sanctum&#8217;);<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>With Sanctum, the client just sends an Authorization: Bearer header on every request.<\/p>\n<p>Inside a tool or resource, you can layer on your own authorization checks using the authenticated user:<\/p>\n<div class=\"copy-wrapper\">\n<h5 class=\"copy-tag\">public function handle(Request $request): Response<br \/>\n{<br \/>\nif (! $request-&gt;user()-&gt;can(&#8216;read-weather&#8217;)) {<br \/>\nreturn Response::error(&#8216;Permission denied.&#8217;);<br \/>\n}<br \/>\n\/\/ &#8230;<br \/>\n}<\/h5>\n<p><button class=\"copyButton\"><br \/>\n<i class=\"fa-solid fa-copy\"><\/i><br \/>\n<\/button><br \/>\n<span class=\"copy-message\">Copied!<\/span><\/p>\n<\/div>\n<p>Add rate limiting through the throttle middleware you already saw in Step 3, and if you have tools that should exist for some users and not others entirely, implement shouldRegister() on the tool class so it doesn&#8217;t even show up in the list for people who shouldn&#8217;t see it.<\/p>\n<h2>Hosting Requirements for a Production MCP Server<\/h2>\n<p>Most tutorials on this topic stop the moment the server works on localhost. That&#8217;s the gap worth filling, because deploying an MCP server has a few requirements that a typical Laravel app deployment checklist doesn&#8217;t spell out.<\/p>\n<p>Here&#8217;s what to actually check before picking a host:<\/p>\n<ul>\n<li><b>PHP 8.2 or newer:<\/b> Plenty of budget shared hosts still default to older PHP versions, so confirm this explicitly rather than assuming.<\/li>\n<li><b>HTTPS, non-negotiable:<\/b> AI clients connecting to a web MCP server won&#8217;t talk to it over plain HTTP.<\/li>\n<li><b>SSH and Composer access:<\/b> This alone rules out most entry-level shared hosting plans, since you will need to run Composer and Artisan commands as part of deployment.<\/li>\n<li><b>The ability to set environment variables:<\/b> It is for things like your <code>APP_URL<\/code>, which matters specifically for OAuth, since the metadata document Laravel MCP generates uses <code>APP_URL<\/code> to build the client ID and callback URL.<\/li>\n<li><b>Reasonable request timeouts:<\/b> Some tool calls take longer than a typical page load, especially anything doing real work against a database or a slow third-party API.<\/li>\n<li><b>Outbound network access:<\/b> If any of your tools calls external services.<\/li>\n<\/ul>\n<p>On the shared-versus-VPS question, be realistic about it. A simple, mostly read-only MCP server with light traffic can run comfortably on a decent shared host, as long as that host gives you SSH and PHP 8.2+. Once you are doing heavier tool calls, streaming responses, or expecting real concurrent traffic, a VPS or managed Laravel hosting setup gives you more headroom and control over PHP configuration, worker processes, and timeouts.<\/p>\n<h2>Common Problems and Fixes<\/h2>\n<table style=\"width: 100%; border-collapse: collapse;\" border=\"1\" cellpadding=\"8\">\n<thead>\n<tr>\n<th align=\"left\">Problem<\/th>\n<th align=\"left\">Likely Cause<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Client can&#8217;t connect at all<\/td>\n<td>Check that you are using HTTPS, and confirm the route is registered with<br \/>\n<code>Mcp::web<\/code>, not <code>Mcp::local<\/code>.<\/td>\n<\/tr>\n<tr>\n<td>Tool exists but the model never calls it<\/td>\n<td>The description is too vague; rewrite it as an explicit instruction rather than a label.<\/td>\n<\/tr>\n<tr>\n<td>Validation errors show up oddly on the client side<\/td>\n<td>Validate inside <code>handle()<\/code> and return<br \/>\n<code>Response::error()<\/code> with a message written for a model to read, not just a developer.<\/td>\n<\/tr>\n<tr>\n<td>Getting 401 or 403 responses<\/td>\n<td>The bearer token isn&#8217;t being sent, or the auth middleware is misconfigured.<\/td>\n<\/tr>\n<tr>\n<td>Works locally but breaks in production<\/td>\n<td>Usually a PHP version mismatch, or <code>routes\/ai.php<\/code> didn&#8217;t actually get deployed.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Conclusion<\/h2>\n<p>The process here is straightforward first install the package, scaffold a server, register it with the right method, build a tool with a description that actually earns its keep, test it before anyone else touches it, lock it down with real authentication, and only then think about where it&#8217;s going to live in production. Laravel MCP handles a surprising amount of the plumbing for you, which means most of the real work is in writing clear tool descriptions and picking a host that won&#8217;t fight means you on PHP versions or SSH access.<\/p>\n<p>If your team doesn&#8217;t have the bandwidth to build and secure this in-house, working with an experienced <a href=\"https:\/\/www.hostingseekers.com\/service\/web-development-companies\/laravel-development-companies\" target=\"_blank\" rel=\"noopener\">Laravel development company<\/a> is a reasonable shortcut, since MCP server setup and production hardening is exactly the kind of scoped work these teams handle regularly. If you are at the point of choosing that host, that&#8217;s the part worth spending a little extra time getting right, since it&#8217;s the one step that&#8217;s hardest to undo after launch.<\/p>\n<h2>Frequently Asked Questions<\/h2>\n<h4>Q1.What is an MCP server in Laravel?<\/h4>\n<p><b>Ans.<\/b> It&#8217;s a Laravel application (or a part of one) that exposes tools, resources, and prompts to an AI client through the Model Context Protocol, using the official laravel\/mcp package to handle the routing, schema definitions, and auth.<\/p>\n<h4>Q2. Is the laravel\/mcp package official?<\/h4>\n<p><b>Ans.<\/b> Yes. It&#8217;s maintained by the Laravel team and documented directly on laravel.com, not a third-party or community package.<\/p>\n<h4>Q3. What&#8217;s the difference between Mcp::web() and Mcp::local()?<\/h4>\n<p><b>Ans.<\/b> Mcp::web() registers an HTTP-accessible server for remote clients and needs its own auth setup. Mcp::local() runs the server as an Artisan command, meant for tooling on your own machine, such as a local AI coding assistant.<\/p>\n<h4>Q4. Do I need OAuth, or is Sanctum enough?<\/h4>\n<p><b>Ans.<\/b> Sanctum works fine and is simpler to set up if you are not already using OAuth elsewhere. OAuth 2.1 via Passport is the protocol&#8217;s documented standard and has wider client support, so lean toward it if you are starting fresh or expect third-party clients to connect.<\/p>\n<h4>Q5. Can I run a Laravel MCP server on shared hosting?<\/h4>\n<p><b>Ans.<\/b> For a lightweight, mostly read-only server, yes, as long as the host gives you SSH access and PHP 8.2 or higher. Anything heavier on tool calls or concurrency is better suited to a VPS.<\/p>\n<h4>Q6. Which AI clients can connect to a Laravel MCP server?<\/h4>\n<p><b>Ans.<\/b> Any MCP-compatible client, including Claude Desktop and other tools that support the Model Context Protocol, plus your own applications through Laravel MCP&#8217;s built-in client if you want to call other MCP servers from within Laravel.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction By the end of this guide, you will have a working Laravel application that an AI client like Claude can talk to directly, not through a chatbot wrapper, but through actual function calls into your codebase. The Model Context Protocol, or MCP, is the open standard that makes this possible. Think of it as [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1881,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[17],"tags":[],"class_list":["post-1835","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Connect and Use Laravel with an MCP Server?<\/title>\n<meta name=\"description\" content=\"Build an MCP server in Laravel with the official laravel\/mcp package. Step-by-step setup, tools, auth, testing and hosting requirements.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Connect and Use Laravel with an MCP Server?\" \/>\n<meta property=\"og:description\" content=\"Build an MCP server in Laravel with the official laravel\/mcp package. Step-by-step setup, tools, auth, testing and hosting requirements.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/\" \/>\n<meta property=\"og:site_name\" content=\"HostingSeekers How-To Guides\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-22T11:04:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1672\" \/>\n\t<meta property=\"og:image:height\" content=\"941\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Manvinder Singh\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Manvinder Singh\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/\"},\"author\":{\"name\":\"Manvinder Singh\",\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/#\\\/schema\\\/person\\\/67e44648c1e60cf8a04bc0bf53c227d7\"},\"headline\":\"How to Connect and Use Laravel with an MCP Server?\",\"datePublished\":\"2026-09-22T11:04:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/\"},\"wordCount\":3058,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp\",\"articleSection\":[\"How-To Guides\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/\",\"url\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/\",\"name\":\"How to Connect and Use Laravel with an MCP Server?\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp\",\"datePublished\":\"2026-09-22T11:04:47+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/#\\\/schema\\\/person\\\/67e44648c1e60cf8a04bc0bf53c227d7\"},\"description\":\"Build an MCP server in Laravel with the official laravel\\\/mcp package. Step-by-step setup, tools, auth, testing and hosting requirements.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp\",\"contentUrl\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp\",\"width\":1672,\"height\":941,\"caption\":\"How to Connect and Use Laravel with an MCP Server\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/connect-and-use-laravel-with-an-mcp-server\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How-To Guides\",\"item\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/category\\\/how-to-guides\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to Connect and Use Laravel with an MCP Server?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/#website\",\"url\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/\",\"name\":\"HostingSeekers How-To Guides\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/#\\\/schema\\\/person\\\/67e44648c1e60cf8a04bc0bf53c227d7\",\"name\":\"Manvinder Singh\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4373df1ab2b4f1e40b27df8913e40d494a7fd38d128e0ac30e9f7406a4f96e91?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4373df1ab2b4f1e40b27df8913e40d494a7fd38d128e0ac30e9f7406a4f96e91?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4373df1ab2b4f1e40b27df8913e40d494a7fd38d128e0ac30e9f7406a4f96e91?s=96&d=mm&r=g\",\"caption\":\"Manvinder Singh\"},\"description\":\"Manvinder Singh is the Founder and CEO of HostingSeekers, an award-winning go-to-directory for all things hosting. Our team conducts extensive research to filter the top solution providers, enabling visitors to effortlessly pick the one that perfectly suits their needs. We are one of the fastest growing web directories, with 500+ global companies currently listed on our platform.\",\"sameAs\":[\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/manvinder-singh\\\/\"],\"url\":\"https:\\\/\\\/www.hostingseekers.com\\\/how-to\\\/author\\\/manvinder-singh\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Connect and Use Laravel with an MCP Server?","description":"Build an MCP server in Laravel with the official laravel\/mcp package. Step-by-step setup, tools, auth, testing and hosting requirements.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/","og_locale":"en_US","og_type":"article","og_title":"How to Connect and Use Laravel with an MCP Server?","og_description":"Build an MCP server in Laravel with the official laravel\/mcp package. Step-by-step setup, tools, auth, testing and hosting requirements.","og_url":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/","og_site_name":"HostingSeekers How-To Guides","article_published_time":"2026-09-22T11:04:47+00:00","og_image":[{"width":1672,"height":941,"url":"https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp","type":"image\/webp"}],"author":"Manvinder Singh","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Manvinder Singh","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/#article","isPartOf":{"@id":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/"},"author":{"name":"Manvinder Singh","@id":"https:\/\/www.hostingseekers.com\/how-to\/#\/schema\/person\/67e44648c1e60cf8a04bc0bf53c227d7"},"headline":"How to Connect and Use Laravel with an MCP Server?","datePublished":"2026-09-22T11:04:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/"},"wordCount":3058,"commentCount":0,"image":{"@id":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp","articleSection":["How-To Guides"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/","url":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/","name":"How to Connect and Use Laravel with an MCP Server?","isPartOf":{"@id":"https:\/\/www.hostingseekers.com\/how-to\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/#primaryimage"},"image":{"@id":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp","datePublished":"2026-09-22T11:04:47+00:00","author":{"@id":"https:\/\/www.hostingseekers.com\/how-to\/#\/schema\/person\/67e44648c1e60cf8a04bc0bf53c227d7"},"description":"Build an MCP server in Laravel with the official laravel\/mcp package. Step-by-step setup, tools, auth, testing and hosting requirements.","breadcrumb":{"@id":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/#primaryimage","url":"https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp","contentUrl":"https:\/\/www.hostingseekers.com\/how-to\/wp-content\/uploads\/2026\/09\/How-to-Connect-and-Use-Laravel-with-an-MCP-Server.webp","width":1672,"height":941,"caption":"How to Connect and Use Laravel with an MCP Server"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hostingseekers.com\/how-to\/connect-and-use-laravel-with-an-mcp-server\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hostingseekers.com\/how-to\/"},{"@type":"ListItem","position":2,"name":"How-To Guides","item":"https:\/\/www.hostingseekers.com\/how-to\/category\/how-to-guides\/"},{"@type":"ListItem","position":3,"name":"How to Connect and Use Laravel with an MCP Server?"}]},{"@type":"WebSite","@id":"https:\/\/www.hostingseekers.com\/how-to\/#website","url":"https:\/\/www.hostingseekers.com\/how-to\/","name":"HostingSeekers How-To Guides","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hostingseekers.com\/how-to\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.hostingseekers.com\/how-to\/#\/schema\/person\/67e44648c1e60cf8a04bc0bf53c227d7","name":"Manvinder Singh","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4373df1ab2b4f1e40b27df8913e40d494a7fd38d128e0ac30e9f7406a4f96e91?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4373df1ab2b4f1e40b27df8913e40d494a7fd38d128e0ac30e9f7406a4f96e91?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4373df1ab2b4f1e40b27df8913e40d494a7fd38d128e0ac30e9f7406a4f96e91?s=96&d=mm&r=g","caption":"Manvinder Singh"},"description":"Manvinder Singh is the Founder and CEO of HostingSeekers, an award-winning go-to-directory for all things hosting. Our team conducts extensive research to filter the top solution providers, enabling visitors to effortlessly pick the one that perfectly suits their needs. We are one of the fastest growing web directories, with 500+ global companies currently listed on our platform.","sameAs":["https:\/\/www.hostingseekers.com\/how-to","https:\/\/www.linkedin.com\/in\/manvinder-singh\/"],"url":"https:\/\/www.hostingseekers.com\/how-to\/author\/manvinder-singh\/"}]}},"_links":{"self":[{"href":"https:\/\/www.hostingseekers.com\/how-to\/wp-json\/wp\/v2\/posts\/1835","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostingseekers.com\/how-to\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostingseekers.com\/how-to\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostingseekers.com\/how-to\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostingseekers.com\/how-to\/wp-json\/wp\/v2\/comments?post=1835"}],"version-history":[{"count":46,"href":"https:\/\/www.hostingseekers.com\/how-to\/wp-json\/wp\/v2\/posts\/1835\/revisions"}],"predecessor-version":[{"id":1884,"href":"https:\/\/www.hostingseekers.com\/how-to\/wp-json\/wp\/v2\/posts\/1835\/revisions\/1884"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostingseekers.com\/how-to\/wp-json\/wp\/v2\/media\/1881"}],"wp:attachment":[{"href":"https:\/\/www.hostingseekers.com\/how-to\/wp-json\/wp\/v2\/media?parent=1835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostingseekers.com\/how-to\/wp-json\/wp\/v2\/categories?post=1835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostingseekers.com\/how-to\/wp-json\/wp\/v2\/tags?post=1835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}