laravel-forge-readonly-mcp
Read-only access to a Laravel Forge account: inspect infrastructure, deployments, logs and certificates, with no ability to change anything.
Organisations & servers — list orgs; list/get servers with provider, region, size, PHP and DB versions, IPs, tags, provisioning state; installed PHP versions.
Sites — list every site across all servers, or get one site in full (domain, aliases, repo, branch, PHP, maintenance state, hosting server).
Domains & SSL — list a site's domains/aliases and certificates with type, status and expiry (certificates need the
site:metascope).Deployments — list deployment history (commit, author, status, duration) and get one deployment's detail, plus read the site's deployment script.
Logs — tail a site's application, Nginx access or Nginx error log (needs
server:manage-logs).Server audit — recent server events, scheduled/cron jobs with last-run state, background processes (daemons/queue workers), and site command history.
Integrations — check Horizon, Octane, Reverb, Pulse, Inertia, scheduler and maintenance-mode status for a site.
Databases & backups — list database schemas or users and grants (never contents); list backup configurations to confirm backups exist.
Escape hatch —
forge_getperforms any other documented Forge GET (monitors, firewall rules, Nginx templates, recipes, teams, providers) against a reviewed allowlist.Enforced read-only — only
GETis ever issued, no write tool exists, and secret-bearing reads (.env, credentials, keys) plus the deploy trigger URL are withheld; log text is best-effort scrubbed.Caveat — pagination is capped at 30 items per page with explicit cursors, and several README-listed tools (
get_deployment_log,get_command_output,get_scheduled_job_output,get_server_event_output,get_background_process_log) are absent from this schema.
Provides read-only access to the Laravel Forge API, enabling AI assistants to query server, site, deployment, SSL, log, and other infrastructure details without making changes.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@laravel-forge-readonly-mcp show my servers and their PHP versions"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
laravel-forge-readonly-mcp
A read-only MCP server for the Laravel Forge API.
Point an AI assistant at your Forge infrastructure to answer questions — which server hosts a site, when it last deployed, what's in the error log, which certificates are about to expire — without giving it the ability to change anything.
It cannot deploy, restart, provision, restore, or delete. Not because it's asked not to: there
is no tool for it and no code path for it. The HTTP client only issues GET, and the verb isn't
a parameter anywhere.
Built on Forge's current API (
https://forge.laravel.com/api). The older/api/v1is deprecated and Forge discontinues it on 31 August 2026.
Install
npm install -g laravel-forge-readonly-mcpCreate a token in Forge → account dashboard → API. Recommended scopes are below.
Claude Code
claude mcp add forge -e FORGE_API_TOKEN=your-token -- npx -y laravel-forge-readonly-mcpClaude Desktop / any MCP client
{
"mcpServers": {
"forge": {
"command": "npx",
"args": ["-y", "laravel-forge-readonly-mcp"],
"env": {
"FORGE_API_TOKEN": "your-token",
"FORGE_ORGANIZATION": "your-org-slug"
}
}
}
}FORGE_ORGANIZATION is optional but worth setting if you have one organisation: tools can then
omit the slug, and the assistant doesn't need a lookup call first.
Related MCP server: Forge MCP Server
Options
Flag | Environment variable | Default |
|
| required |
|
| none — pass |
|
|
|
|
|
|
|
| off — see below |
Credentials come only from flags or the environment, never from a tool argument, so nothing the model says can change which token, base URL or default organisation is used.
Tools
24 named tools for the common reads, plus one escape hatch. Forge publishes 133 GET
endpoints; mapping them 1:1 would cost 30–50k tokens of JSON schema in your context window
before you asked anything, so the frequent paths get real tools and forge_get covers the rest
against the same allowlist.
Tool | What it answers |
| Which orgs can this token see? |
| Provider, region, size, PHP version, IPs, provisioning state |
| Recent Forge activity on a server — the closest thing to an audit trail |
| Installed PHP versions and the default — find servers on an EOL version |
| Every site across all servers: domain, repo, PHP, deploy state |
| Domains, aliases and SSL expiry |
| Deployment history: commit, author, status, duration |
| The commands each deploy runs |
| Application, Nginx access or Nginx error log |
| Why a deploy failed — the deploy script's output. Needs |
| Output of a command run from the Commands panel |
| Output of a cron job's last run — is the schedule actually succeeding? |
| Output of a Forge server event (provisioning, service restart) |
| Queue worker / daemon log. Needs |
| Cron jobs for a server or one site, with last-run state |
| Daemons and queue workers, and whether they're running |
| Is Horizon/Octane/Reverb/Pulse/Inertia/scheduler on? In maintenance mode? |
| History of commands run from the Commands panel |
| Database schemas, or users and their grants (never contents) |
| Is this server actually being backed up? |
| Any other documented Forge GET — monitors, firewall rules, Nginx templates, recipes, teams, providers… |
List tools take page_size, cursor, sort, include and filter. Cursors are never followed
automatically — see rate limiting.
Pages hold at most 30 items. Forge caps
page[size]at 30 and silently returns 30 for anything larger, sopage_sizeis limited to 30 rather than accepting a number Forge will ignore.Every list response starts with a
pageline, such as30 items on this page, and MORE PAGES exist. Pass cursor "…", or2 items. This is the last page.Forge puts the cursor at the end of the response, which on a long page is where a reader stops.list_sitestakesfilter: {"name": "acme.com"}to find one site without paging.Sites on revoked servers are marked. Forge keeps listing a revoked (archived) server's sites as
installed. Withinclude="server",list_sitesandget_siteaddserver_revoked: trueto those sites, so a stale namesake is not mistaken for the live site.list_deploymentsis newest first unless you passsort. Forge's own default is oldest first, the wrong way round for "did my push deploy?".
Log and output tools return the tail
Forge offers no range parameter and applies no limit: one real site's application log measured
274,503 characters over 500 lines — about 69,000 tokens in a single response. So every
log/output tool returns the last 200 lines by default (failures are at the end), raisable via
tail_lines, and is additionally capped by character count because line counts lie — that log
averaged ~550 characters per line, and one PHP stack-trace line can exceed a thousand. Anything
dropped is stated at the top of the output, so a truncated log never reads as a complete one.
Forge also returns HTTP 200 in three cases where there is no log to give, each of which reads as a broken tool unless explained. All three are detected and described in the response:
The server's Forge access was revoked. Forge reads logs over SSH at request time, so a revoked server yields
Permission denied (publickey)as the log body. The tools point you atrevokedon the server.The deployment's output file was pruned. Forge stores each deployment's output on the server and deletes older ones per the site's
deployment_retention, so historical deployments returncat: …: No such file or directory. The deployment record itself still works.The log is empty (
=== Empty log file ===).
Token scopes: the part worth reading
Forge has genuine view-only scopes, so a token can be minted that is incapable of writing. These five reach 76 of the 120 endpoints this server exposes (plus 13 more that need no scope at all) with zero write capability:
organization:view server:view user:view team:view recipe:viewTwo other view scopes are not worth granting. credential:view unlocks exactly one endpoint
this server exposes (a VPC lookup) — its other three are cloud-provider credentials, which are
withheld — so it buys nothing while widening what a leaked
token could read. resources:view currently gates no endpoint at all; add it when Forge ships the
managed-database and object-storage API.
The wrinkle: 30 reads sit behind manage scopes, so getting the read also buys the write.
Two are worth it, and the rest mostly aren't:
Scope | Reads it unlocks | Writes it also grants | Suggested |
| 8 — all domains and certificates | add / modify / delete a domain | Add — this is SSL and domain visibility |
| 4 — application and Nginx logs, server logs | clearing logs, nothing else | Add — smallest blast radius, biggest payoff |
| 6 | redirect rules, webhooks, healthcheck | Optional |
| 2 — Nginx config | rewrite the Nginx config | Skip unless needed |
| 2 — firewall rules | change the firewall | Skip unless needed |
| 2 | basic-auth rules | Skip |
| 1 — the deployment log | deploy the site, rewrite the deploy script (8) | Your call — see below |
| 1 — queue worker log | create daemons, enable Horizon/Octane/Pulse (8) | Your call — see below |
| 2 — backup instances | restore a backup | Don't |
| 2 | delete storage providers | Don't |
Suggested token — seven scopes:
organization:view server:view user:view team:view recipe:view site:meta server:manage-logsThat reaches 101 of the 120 endpoints this server exposes, and the token cannot deploy, restore a backup, change a firewall, or rewrite an Nginx config. Its only write powers are clearing a log and modifying a domain.
For a token with literally no write capability, drop site:meta and server:manage-logs:
89 endpoints, but no logs and no domain or certificate visibility.
The two log scopes that also grant writes
get_deployment_log and get_background_process_log are the only tools whose scopes grant real
write power — deploy, and enabling Horizon/Octane/Pulse respectively. There is no alternative
source: a deployment object carries only commit, status and timings, with no output field, and
Forge gates the log behind the same scope as deploying.
Worth being precise about what granting them does and doesn't change. It does not give this
server, or a model talking to it, any ability to deploy: no write tool exists, the client only
issues GET, the deploy-hook endpoint stays excluded and deployment_url stays redacted. What it
changes is the token's capability if the token itself leaks. Whether that trade is worth a
failed deploy's output is a judgement about your threat model, not something this package should
make for you — so both tools ship regardless, and simply return a 403 naming the scope when you
haven't granted it.
Every scope-gated endpoint stays available in this package regardless of what you grant — your token's scopes decide, not us. A 403 says which scope was missing, and whether that scope would also hand over write access:
Forge denied access to /orgs/acme/servers/1/sites/2/nginx (403). This endpoint requires the
"site:manage-nginx" scope, which your token does not have. Note that "site:manage-nginx" also
grants the matching write permissions — this package deliberately does not require you to hold
it, and will simply not serve this read if you would rather keep the token read-only.What it deliberately won't read
A GET being read-only doesn't make it safe to put in front of a language model. Thirteen
of Forge's reads are withheld by default, for two different reasons.
They'd leak a secret:
…/sites/{site}/environment— Forge documents this as "Get .env content": database passwords,APP_KEY, every third-party API key the app holdsComposer and npm registry credentials
Cloud provider credentials (
/server-credentials)SSH keys and deploy keys
They'd leak a write capability:
…/deployments/deploy-hookreturns, in Forge's words, "the deployment trigger URL" — a URL that triggers a deploy with no authentication. Handing that string to a model defeats the entire point of a read-only server, however much the verb wasGET.
That last one is why this package doesn't implement read-only as "allow all GETs". Refusals explain themselves rather than looking like a bug:
/orgs/acme/servers/1/sites/2/deployments/deploy-hook is a read this server deliberately
withholds: the deployment trigger URL — an unauthenticated deploy capability, so reading it
would hand out the ability to deploy. Exposing it would grant a write capability, which
defeats the purpose of a read-only server.…and one field, wherever it appears
Withholding an endpoint is worthless if the thing it guards is duplicated into a payload you do serve. Forge returns the deploy trigger URL inline on ordinary site reads:
{ "attributes": { "deployment_url": "https://forge.laravel.com/servers/1/sites/2/deploy/http?token=…" } }That's the same unauthenticated deploy capability as the deploy-hook endpoint, arriving through
get_site and list_sites. So every response is also filtered field-by-field, and
deployment_url comes back as:
[withheld: deploy trigger URL — an unauthenticated capability to deploy the site, not a read]The key is preserved so you can see something was withheld, and a null value passes through
untouched — that legitimately means quick-deploy is off. The general lesson, learned by probing
the live API rather than reading its docs: for a read-only surface over someone else's API the
unit of danger is a field, not an endpoint. Fields travel.
…and secrets inside log text
The same lesson recurs a layer down, and this one cannot be solved cleanly. This server withholds
.../environment to keep .env out of model context — but a deployment log is the output of a
deploy script that may echo environment variables, composer auth tokens turn up in build output,
and get_command_output replays whatever a human chose to run, cat .env included. Field-level
redaction can't help, because the secret is inside a blob of text.
So log and command output additionally passes through a best-effort scrubber for
credential-shaped substrings: KEY=/SECRET:/PASSWORD= assignments, Authorization: Bearer …,
?token=…, AWS AKIA… ids, https://user:pass@host, and PRIVATE KEY blocks. Redactions keep
the key name so the line still reads as a log line and you can see what was withheld.
This is best-effort and not a guarantee. Pattern matching over arbitrary log output cannot be
complete, and it is deliberately narrow — a greedy scrubber that mangled ordinary log lines would
push people to disable it wholesale, which loses far more than it gains. Treat log output as
potentially containing secrets regardless. get_command_output deserves the most caution of the
set.
--unsafe-allow-secrets re-enables all thirteen endpoints and this field. It's off by default and
named to be hard to turn on by accident. If you enable it, those values will appear in model
context and in transcripts and logs wherever they're kept.
How read-only is enforced
Four independent layers, so no single mistake is sufficient:
No write tool exists. Only reads are implemented, so there is nothing to disable.
The client can only
GET. The verb is a literal in one place and is never threaded through from configuration or arguments.Every path is matched against an allowlist of Forge's documented GET templates before a request is built. This is what makes
forge_getsafe: the model picks a path, but only from a set already reviewed. Denials are checked before allowances, because an excluded literal path (…/deployments/deploy-hook) collides with a legitimate template (…/deployments/{deployment}) — in a deny-by-default boundary the denial must win.Every response is filtered field-by-field on the way out, because the endpoint allowlist alone let the deploy trigger URL through inline on ordinary site reads. Log and command text is additionally scrubbed for credential shapes, and bounded in size.
Your token's scopes, if you mint it view-only — defence in depth rather than the primary control.
The allowlist is generated from Forge's OpenAPI spec (npm run generate:paths), so a typo
can't silently create a hole. npm run check:drift — run in CI on every PR and weekly — fails if
a new GET appears unreviewed, if one we rely on disappears, if a read moves behind a
write-granting scope, or, most importantly, if a withheld path is renamed such that its
exclusion silently stops protecting anything.
Rate limiting
Forge allows 60 requests per minute per token. This package keeps a local sliding window and
also honours X-RateLimit-* and Retry-After, retrying a 429 twice before giving up with advice
to narrow the request.
Cursors are never followed automatically. A single "check every site" call must not be able
to spend the whole minute, so pagination is explicit: read the page line (or meta.next_cursor) and pass the cursor back as
cursor.
Development
npm install
npm run lint # tsc --noEmit
npm test # unit tests (no network)
npm run build
node scripts/smoke.mjs # drives the built binary over stdio; no network needed
npm run generate:paths # regenerate the path table from Forge's spec
npm run check:drift # fail if the package has drifted from Forge's APIFORGE_SPEC_FILE=/path/to/spec.json makes the generator and drift check read a local spec
instead of fetching.
Using this behind an MCP gateway
Tool names are intentionally un-prefixed (list_servers, not forge_list_servers), because
aggregating gateways add their own namespace and a self-prefixed name becomes
forge__forge_list_servers downstream.
Annotations split by kind: this package sets readOnlyHint and idempotentHint (facts about the
tool, true everywhere) plus a plain title. A gateway is free to override the top-level title
with its own house convention.
main and bin are the same built entry, so a gateway can require.resolve() the package and
run it under its own Node rather than needing a global install.
Licence
MIT. Not affiliated with or endorsed by Laravel. "Laravel" and "Laravel Forge" are trademarks of Taylor Otwell; this is an independent client for their public API.
Available Tools
25 toolsforge_getForge API Read (any endpoint)ARead-onlyIdempotent
Perform an arbitrary GET against the Forge API for endpoints the named tools do not cover — monitors, firewall rules, Nginx templates, recipes, teams, PHP config, heartbeats, providers and so on. Pass a path relative to the API base with real ids substituted, e.g. "/orgs/acme/servers/12345/monitors". Only documented Forge GET endpoints are permitted: writes are impossible, and a small set of reads that would expose secrets (.env contents, registry and provider credentials, SSH and deploy keys) or hand over a deploy capability (the deployment trigger URL) are refused with an explanation. Query parameters go in query, not in the path — e.g. {"page[size]": 50}.
Inputs: path (required), query, tail_lines.
get_background_process_logGet Background Process LogARead-onlyIdempotent
The log of a daemon or queue worker — what a stuck or crashing queue is actually printing. Get the id from list_background_processes. Requires the server:create-daemons scope; that scope ALSO grants creating daemons and enabling Horizon/Octane/Pulse, so a strictly read-only token will get a 403 here while list_background_processes still works.
Inputs: server (required), background_process (required), tail_lines, organization.
get_command_outputGet Command OutputARead-onlyIdempotent
The output of a command previously run from a site's Commands panel. Get the command id from list_site_commands. NOTE: this replays whatever a human chose to run, so it is the tool most likely to contain deliberately-dumped secrets — credential-shaped text is scrubbed on a best-effort basis, but do not treat the result as sanitised.
Inputs: site (required), server (required), command (required), tail_lines, +1 more.
get_deploymentGet DeploymentARead-onlyIdempotent
One deployment in detail: commit, author, status, timings and any failure information. Note that the deployment OUTPUT log needs the site:manage-deploys scope, which also grants the ability to deploy — so a read-only token will get a 403 for the log while this summary still works.
Inputs: site (required), server (required), deployment (required), organization.
get_deployment_logGet Deployment LogARead-onlyIdempotent
The output of a deployment — the deploy script's stdout/stderr, which is what actually tells you why a deploy failed. Get the deployment id from list_deployments. Requires the site:manage-deploys scope; be aware that scope ALSO grants the ability to deploy, so a strictly read-only token will get a 403 here while list_deployments and get_deployment still work.
Inputs: site (required), server (required), deployment (required), tail_lines, +1 more.
get_deployment_scriptGet Deployment ScriptARead-onlyIdempotent
The site's deployment script — the commands Forge runs on each deploy. Read-only: this cannot change the script.
Inputs: site (required), server (required), organization.
get_scheduled_job_outputGet Scheduled Job OutputARead-onlyIdempotent
The output of the most recent run of a scheduled (cron) job — server-level, or site-level if you pass site. Use it to see whether a schedule is actually succeeding rather than just firing. Get the job id from list_scheduled_jobs.
Inputs: job (required), server (required), site, tail_lines, +1 more.
get_serverGet ServerARead-onlyIdempotent
Get one server in full: provider and region, sizes, PHP and database versions, IP addresses, tags and provisioning state.
Inputs: server (required), include, organization.
get_server_event_outputGet Server Event OutputARead-onlyIdempotent
The output of a Forge server event — a provisioning step, service restart or configuration change. Get the event id from list_server_events. Useful for finding out why a Forge-side operation failed.
Inputs: event (required), server (required), tail_lines, organization.
get_server_phpGet Server PHP VersionsARead-onlyIdempotent
The PHP versions installed on a server, which is the default, and their patch levels. Useful for spotting servers left on an end-of-life version.
Inputs: server (required), organization.
get_siteGet SiteARead-onlyIdempotent
Get one site in full: domain and aliases, web directory, PHP version, repository and branch, quick-deploy state and which server it lives on. Note that Forge addresses a single site at organisation level, so no server id is needed.
Inputs: site (required), include, organization.
get_site_integrationGet Site Integration StatusARead-onlyIdempotent
Whether a first-party Laravel integration is enabled for a site: Horizon, Octane, Reverb, Pulse, Inertia, the scheduler, or maintenance mode. "laravel-maintenance" answers "is this site in maintenance mode?".
Inputs: site (required), server (required), integration (required), organization.
get_site_logsGet Site LogsARead-onlyIdempotent
Tail a site's logs: the Laravel/application log, or the Nginx access or error log. The first place to look when a site is throwing errors. Returns the END of the log by default (that is where failures are) — raise tail_lines for more. Requires the server:manage-logs scope, whose only write power is clearing logs. Note that Forge reads logs from the server over SSH at request time, so a server whose Forge access has been revoked returns an SSH error instead of a log.
Inputs: site (required), type (required), server (required), tail_lines, +1 more.
list_background_processesList Background ProcessesARead-onlyIdempotent
Daemons and queue workers on a server — command, user, process count and status. Use it to check queue workers are running and correctly sized.
Inputs: server (required), sort, cursor, filter, +3 more.
list_backup_configsList Backup ConfigurationsARead-onlyIdempotent
Database backup configurations on a server — schedule, retention, destination and which databases are covered. Answers "is this server actually being backed up?". Listing individual backup INSTANCES needs the server:create-backups scope, which also grants restore, so it is not exposed here.
Inputs: server (required), sort, cursor, filter, +3 more.
list_certificatesList Site CertificatesARead-onlyIdempotent
A site's SSL certificates with their type, status and expiry — the read to use for certificate-expiry checks. Requires the site:meta scope.
Inputs: site (required), server (required), sort, cursor, +4 more.
list_databasesList DatabasesARead-onlyIdempotent
Database schemas on a server, or the database users and the schemas they can access. Names and grants only — this never reads database contents.
Inputs: server (required), sort, cursor, filter, +4 more.
list_deploymentsList DeploymentsARead-onlyIdempotent
A site's deployment history — commit, author, status, duration and timestamps. Use it to find when a site last shipped, or to identify a failed deployment to inspect with get_deployment. Newest first unless you pass sort (Forge's own default is oldest first).
Inputs: site (required), server (required), sort, cursor, +4 more.
list_domainsList Site DomainsARead-onlyIdempotent
The domains attached to a site, including aliases and their certificate state. Pair with list_certificates to audit SSL expiry.
Inputs: site (required), server (required), sort, cursor, +4 more.
list_organizationsList OrganisationsARead-onlyIdempotent
List the Forge organisations this API token can reach, with their slugs. Every other tool takes an organisation slug (or uses the configured default). Start here if you do not know the slug.
Inputs: sort, cursor, filter, include, +1 more.
list_scheduled_jobsList Scheduled JobsARead-onlyIdempotent
Cron/scheduled jobs, either for a whole server or for one site. Shows the command, user, frequency and last run state — use it to confirm a schedule exists and is firing.
Inputs: server (required), site, sort, cursor, +4 more.
list_server_eventsList Server EventsARead-onlyIdempotent
A server's recent Forge activity — provisioning steps, service restarts, configuration changes, who triggered them and whether they succeeded. The closest thing Forge has to an audit trail, and the first place to look when something changed unexpectedly.
Inputs: server (required), sort, cursor, filter, +3 more.
list_serversList ServersARead-onlyIdempotent
List the servers in an organisation — provider, region, size, PHP version, IP addresses and provisioning status. Supports filter/sort/include (try include="tags"). Use this to find a server id for the other tools.
Inputs: sort, cursor, filter, include, +2 more.
list_site_commandsList Site Command HistoryARead-onlyIdempotent
The history of commands run from a site's Commands panel, with who ran them and when. An audit read — this cannot run a command.
Inputs: site (required), server (required), sort, cursor, +4 more.
list_sitesList SitesARead-onlyIdempotent
List every site in an organisation across all servers, with its domain, project type, PHP version, repository, deployment and maintenance-mode state. Prefer this over listing sites server by server. Note that the hosting server is NOT included by default — pass include="server" to answer "which server hosts acme.com?" in one call. To find one site, filter by name (filter: {"name": "acme.com"}) rather than paging through them all. Sites on a revoked (archived) server are still listed as installed; with include="server" they are marked server_revoked: true, so a stale namesake is not taken for the live site.
Inputs: sort, cursor, filter, include, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 25 tools
Each named tool targets a distinct Forge resource or action, and the descriptions do a good job clarifying scope and required identifiers. However, the cluster of output/log readers (get_deployment_log, get_command_output, get_scheduled_job_output, get_server_event_output, get_background_process_log) and the forge_get catch-all can be mistaken for one another without reading the full descriptions.
Nearly all tools follow a predictable snake_case verb_noun pattern (list_servers, get_site, list_deployments). The main deviations are forge_get's prefix order and a slight suffix inconsistency between *_output and *_log, but overall naming is readable and consistent.
25 tools is borderline heavy for a read-only surface. The breadth of Laravel Forge justifies many tools, but several resource-specific readers (sites, deployments, logs, outputs) could be consolidated, especially since forge_get already covers uncovered endpoints.
The surface provides strong read-only coverage for servers, sites, deployments, databases, backups, scheduled jobs, logs, certificates and integrations. Minor gaps for first-class tools covering monitors, firewall rules, Nginx templates, teams and similar areas are workable via forge_get, and a few log tools may return 403 with a strictly read-only token.
Maintenance
Related MCP Connectors
Read-only MCP for AI usage profiles, leaderboards, stats, and docs; no writes or private data.
The HubSpot MCP Server acts as a bridge that enables AI assistants and Large Language Models to securely interact with HubSpot CRM data through natural conversation, without requiring users to understand complex API structures. It provides read-only access to standard CRM objects (contacts, companies, deals, tickets, products, invoices, and more) and their associations, secured via OAuth 2.0, allowing AI agents to perform tasks like summarizing deals, fetching company updates, and looking up record changes.
Read-only Google Search Console MCP server for AI assistants.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseDqualityDmaintenanceA minimalist MCP server that integrates with Laravel Forge, allowing users to manage their Laravel Forge servers, sites, and deployments through AI assistants like Claude Desktop, Windsurf, or Cursor.12MIT
- AlicenseNot gradedqualityDmaintenanceIntegrates with the Laravel Forge API to provide comprehensive management of servers and sites. It enables users to perform health checks, monitor logs, create resources, and execute deployment tasks through MCP-compliant tools.22 npm2MIT
- AlicenseBqualityDmaintenanceMCP server for managing Laravel Forge servers, sites, and deployments via the Forge API.1236 npm9MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to fully manage Laravel Forge servers, sites, databases, workers, daemons, SSL certificates, and deployments.3936 npmMIT