> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel AI-agents ondersteunen nu MCP-servers

> Uitleg over de MCP-clientfunctionaliteit die is toegevoegd aan de Laravel AI SDK en Laravel MCP. Je kunt tools van MCP-servers nu rechtstreeks opnemen in de tools() van je agent.

## Overzicht

In juni 2026 werd op de [officiële Laravel-blog](https://laravel.com/blog/laravel-ai-agents-now-support-mcp-servers) aangekondigd dat AI-agents gebouwd met de Laravel AI SDK nu verbinding kunnen maken met **MCP-servers (Model Context Protocol)**.

Tot nu toe bood Laravel MCP de mogelijkheid om je Laravel-app **als MCP-server** te publiceren, maar de nieuwe functionaliteit werkt in de omgekeerde richting: je Laravel-app kan nu **als MCP-client** verbinding maken met andere MCP-servers.

<Info>
  Raadpleeg de [documentatie van Laravel MCP](https://laravel.com/docs/mcp) voor de details van hoe MCP zelf werkt. Deze pagina richt zich uitsluitend op de clientfunctionaliteit.
</Info>

## Waarom dit in Laravel MCP is geïmplementeerd en niet in de AI SDK zelf

MCP is een protocol met een breed werkterrein: transportnegotiatie, handshakes, authenticatieflows, enzovoort. Zou je dit rechtstreeks in de AI SDK implementeren, dan kun je het niet hergebruiken in situaties waarin je zonder agent met een MCP-server wilt communiceren (zoals queue-jobs of consolecommando's).

Daarom heeft het Laravel-team de functionaliteit in tweeën gesplitst.

```mermaid theme={null}
graph LR
    A["laravel/mcp<br>MCP-client"] --> B["Verbinding, authenticatie en handshake"]
    C["laravel/ai<br>Dunne integratielaag"] --> D["MCP-tools rechtstreeks toevoegen<br>aan de tools() van een agent"]
    A --> C
```

* **`laravel/mcp`**: de eigenlijke MCP-client die verbinding, negotiatie, authenticatie en het aanroepen van tools voor zijn rekening neemt
* **`laravel/ai`**: een dunne integratielaag waarmee agents die client naadloos vanuit `tools()` kunnen gebruiken

Elk onderdeel is ook op zichzelf bruikbaar, en gecombineerd kun je vanuit een agent de tools van een MCP-server op dezelfde manier behandelen als handgeschreven tools.

## Verbinden met een MCP-server

Zowel STDIO-servers die als lokaal proces worden gestart als remote servers via HTTP worden ondersteund.

```php theme={null}
use Laravel\Mcp\Client;

// Lokale server (STDIO)
$client = Client::local('npx', ['-y', '@modelcontextprotocol/puppeteer']);
$tools = $client->tools();

// Remote server (Streamable HTTP)
$client = Client::web('https://nightwatch.laravel.com/mcp');
$tools = $client->tools();
```

De verbinding, handshake en negotiatie van de protocolversie worden allemaal door de client afgehandeld, dus aan de app-kant hoef je alleen `tools()` aan te roepen.

## Authenticatie

### Bearer-token

```php theme={null}
$tools = Client::web('https://mcp.example.com')
    ->withToken($token)
    ->tools();
```

### OAuth

Veel gehoste MCP-servers, zoals Nightwatch, vereisen OAuth. Je registreert een benoemde client in een serviceprovider.

```php theme={null}
use Laravel\Mcp\Client;
use Laravel\Mcp\Facades\Mcp;

Mcp::registerClient('nightwatch', fn () =>
    Client::web('https://nightwatch.laravel.com/mcp')->withOAuth()
);
```

Vervolgens bedraad je de OAuth-routes en de callbackafhandeling.

```php theme={null}
use Laravel\Mcp\Facades\Mcp;
use Laravel\Mcp\Client\OAuth\TokenSet;

Mcp::oAuthRoutesFor('nightwatch', function (string $provider, TokenSet $token) {
    auth()->user()->update([
        'mcp_nightwatch_token' => encrypt($token->accessToken),
        'mcp_nightwatch_refresh' => encrypt($token->refreshToken),
    ]);

    return redirect('/dashboard');
}, middleware: 'auth');
```

Hiermee worden `mcp.oauth.nightwatch.connect` en de bijbehorende callbackroute gegenereerd. Aan de Blade-kant plaats je alleen nog een verbindknop.

```blade theme={null}
<a href="{{ route('mcp.oauth.nightwatch.connect') }}">
    Connect Nightwatch
</a>
```

Wanneer de gebruiker inlogt en goedkeuring geeft, ontvangt de callback-closure het token. Je hoeft je niet zelf bezig te houden met de details van redirect-URL's of PKCE.

Voor achtergrondprocessen zonder gebruikersinteractie is er ook een client credentials grant beschikbaar.

```php theme={null}
$token = Mcp::client('billing')->oAuthClient()->clientCredentials();
```

## Integratie in een agent

Het belangrijkste punt is dat je MCP-tools kunt mengen zonder de `tools()`-methode van je agent te veranderen.

```php theme={null}
use Laravel\Mcp\Facades\Mcp;
use App\Tools\SendSlackMessage;

class SupportAgent extends Agent
{
    public function instructions(): string
    {
        return 'You help triage production issues.';
    }

    public function tools(): array
    {
        return [
            ...Mcp::client('nightwatch')
                ->withToken(auth()->user()->mcp_nightwatch_token)
                ->tools(),
            new SendSlackMessage,
        ];
    }
}
```

Laravel AI detecteert dat de inhoud van de `tools()`-array MCP-tools zijn en wikkelt ze zo in dat ze voldoen aan het toolcontract van de agent. Het zet het MCP-inputschema om naar het JSON-schema van Laravel, voert de remote call uit wanneer het model een tool aanroept, en normaliseert het resultaat. Fouten, gestructureerde data, platte tekst en streaming-updates worden allemaal automatisch afgehandeld, zodat er geen MCP-details in de code van je agent doorsijpelen.

Je kunt ook meerdere transports in één agent combineren.

```php theme={null}
public function tools(): array
{
    return [
        ...Mcp::client('nightwatch')->tools(),
        ...Client::local('npx', ['-y', '@modelcontextprotocol/server-puppeteer'])->tools(),
        new SendSlackMessage,
    ];
}
```

Bovendien kun je toolklassen die je hebt geschreven voor je eigen Laravel MCP-server zonder clientverbinding rechtstreeks aan een agent doorgeven. Dezelfde tool is dus herbruikbaar voor zowel externe publicatie als voor je agent.

```php theme={null}
use App\Mcp\Tools\CurrentWeatherTool;

public function tools(): array
{
    return [
        new CurrentWeatherTool,
        new SendSlackMessage,
    ];
}
```

## De toollijst cachen

Het ophalen van de toollijst vergt een roundtrip naar de server. Zeker bij remote servers via OAuth is het zonde om die bij elke prompt aan te roepen. Omdat toollijsten niet vaak veranderen, zijn ze uitstekend geschikt om te cachen.

```php theme={null}
public function tools(): array
{
    $tools = Cache::remember('mcp.nightwatch.tools', now()->addHour(), fn () =>
        Mcp::client('nightwatch')->tools()
    );

    return [...$tools, new SendSlackMessage];
}
```

MCP-tools worden geretourneerd als platte data, dus ze werken ook gewoon nadat je ze uit de cache hebt hersteld.

## Testen

Ook zonder een draaiende MCP-server kun je agents testen met de fake-functionaliteit van Laravel AI. MCP-toolnamen volgen de naamconventie `mcp_tools_<name>`, dus een tool genaamd `search` verschijnt als `mcp_tools_search`.

```php theme={null}
use Laravel\Ai\Responses\Data\ToolCall;

SupportAgent::fake([
    new ToolCall('call_1', 'mcp_tools_search', ['query' => 'laravel']),
    'Found the issue.',
]);

$response = (new SupportAgent)->prompt('Find the latest error');

expect($response->toolCalls)->toHaveCount(1);
expect($response->toolResults->first()->result)->toContain('Found');
```

De normale loop van de agent blijft gewoon draaien; alleen de uitspraken van het model worden door de fake bepaald. De toolaanroepen zelf gaan daadwerkelijk door de MCP-laag, zodat je zonder netwerk hetzelfde pad test als in productie.

## Wat momenteel wordt ondersteund

In deze eerste release worden tools en prompts ondersteund op zowel het STDIO- als het Streamable HTTP-transport. Voor authenticatie worden Bearer-tokens en OAuth ondersteund. Naarmate MCP zelf zich verder ontwikkelt, zal de ondersteuning naar verwachting worden uitgebreid.

## Gerelateerde pagina's

<CardGroup cols={2}>
  <Card title="Een custom provider voor de AI SDK bouwen" href="/nl/advanced/ai-sdk-custom-provider" icon="plug">
    Hoe je een custom provider implementeert voor AI-diensten die niet standaard worden ondersteund
  </Card>

  <Card title="Introductie van Laravel Nightwatch" href="/nl/blog/nightwatch-introduction" icon="binoculars">
    Uitleg over Nightwatch, de gehoste monitoringdienst die in dit artikel als voorbeeld wordt gebruikt
  </Card>
</CardGroup>


## Related topics

- [Laravel-updates van juni 2026](/nl/blog/changelog/202606.md)
- [laravel/agent-skills — de officiële Laravel-collectie van AI-agentskills](/nl/blog/agent-skills-introduction.md)
- [Laravel MCP](/nl/mcp.md)
- [Laravel AI SDK](/nl/ai-sdk.md)
- [Laravel en AI-ontwikkeling](/nl/ai.md)
