Skills
Skill 18 of 20
Security best practices for Mapbox access tokens, including scope management, URL restrictions, rotation strategies, and protecting sensitive data.
3 minutes · 709 words · 19 sections
Install
npx skills add mapbox/mapbox-agent-skills --skill mapbox-token-securitynpx skills add mapbox/mapbox-agent-skills/plugin marketplace add mapbox/mapbox-agent-skillsThe first command installs just this skill, by the name in its SKILL.md; the second installs the whole repository.
This skill provides security expertise for managing Mapbox access tokens safely and effectively.
Characteristics:
When to use:
Allowed scopes:
styles:tiles - Display style tiles (raster)styles:read - Read style specificationsfonts:read - Access Mapbox fontsdatasets:read - Read dataset datavision:read - Vision API accessCharacteristics:
When to use:
Common scopes:
styles:write - Create/modify stylesstyles:list - List all stylestokens:read - View token informationtokens:write - Create/modify tokensCharacteristics:
When to use:
Always grant the minimum scopes needed:
❌ Bad:
// Overly permissive - don't do this
{
scopes: ['styles:read', 'styles:write', 'styles:list', 'styles:delete', 'tokens:read', 'tokens:write'];
}✅ Good:
// Only what's needed for displaying a map
{
scopes: ['styles:read', 'fonts:read'];
}
// Add 'styles:tiles' if your map uses raster tile sources
{
scopes: ['styles:read', 'fonts:read', 'styles:tiles'];
}Public Map Display (client-side):
{
"scopes": ["styles:read", "fonts:read", "styles:tiles"],
"note": "Public token for map display",
"allowedUrls": ["https://myapp.com/*"]
}Style Management (server-side):
{
"scopes": ["styles:read", "styles:write", "styles:list"],
"note": "Backend style management - SECRET TOKEN"
}Token Administration (server-side):
{
"scopes": ["tokens:read", "tokens:write"],
"note": "Token management only - SECRET TOKEN"
}Read-Only Access:
{
"scopes": ["styles:list", "styles:read", "tokens:read"],
"note": "Auditing/monitoring - SECRET TOKEN"
}URL restrictions limit where a public token can be used, preventing unauthorized usage if the token is exposed.
✅ Recommended patterns:
https://myapp.com/* # Production domain
https://*.myapp.com/* # All subdomains
https://staging.myapp.com/* # Staging environment
http://localhost:* # Local development❌ Avoid these:
* # No restriction (insecure)
http://* # Any HTTP site (insecure)
*.com/* # Too broadCreate separate tokens for each environment:
// Production
{
note: "Production - myapp.com",
scopes: ["styles:read", "fonts:read"],
allowedUrls: ["https://myapp.com/*", "https://www.myapp.com/*"]
}
// Staging
{
note: "Staging - staging.myapp.com",
scopes: ["styles:read", "fonts:read"],
allowedUrls: ["https://staging.myapp.com/*"]
}
// Development
{
note: "Development - localhost",
scopes: ["styles:read", "fonts:read"],
allowedUrls: ["http://localhost:*", "http://127.0.0.1:*"]
}✅ DO:
❌ DON’T:
Example: Secure Environment Variable:
# .env (NEVER commit this file)
MAPBOX_SECRET_TOKEN=sk.ey...
# .gitignore (ALWAYS include .env)
.env
.env.local
.env.*.local✅ DO:
❌ DON’T:
Example: Safe Client Usage (Vite):
Note: This example uses Vite. For Next.js, CRA, Angular, or a plain
window.MAPBOX_ACCESS_TOKEN/ CDN setup, see Token Management (opens in a new tab). Do not chainimport.meta.envandprocess.envin one expression — the unused path throwsReferenceErrorin the browser.
// Public token with URL restrictions - SAFE (Vite)
const mapboxToken = import.meta.env.VITE_MAPBOX_ACCESS_TOKEN;
// Guard BEFORE constructing the map — missing tokens otherwise yield a silent blank map
if (!mapboxToken || mapboxToken === 'YOUR_MAPBOX_ACCESS_TOKEN') {
throw new Error('Missing VITE_MAPBOX_ACCESS_TOKEN — set it in env before creating the map');
}
mapboxgl.accessToken = mapboxToken;Agents often assign mapboxgl.accessToken and call new mapboxgl.Map(...) with no check. That fails closed as a blank canvas with no UI error.
Always:
pk. in source)accessToken and construct the mapToken Creation:
Token Management:
new mapboxgl.MapMonitoring:
Incident Response:
For detailed guidance on specific topics, load these references as needed:
references/token-management.md — Bundler-specific env var names and access patterns (Vite / Next / CRA / Angular / CDN). Load when: wiring tokens in a different framework than the Vite example above.references/rotation-monitoring.md — Token rotation strategies (zero-downtime + emergency), monitoring metrics, alerting rules, and monthly/quarterly audit checklists. Load when: implementing rotation, setting up monitoring, or conducting audits.references/incident-response.md — Step-by-step incident response plan and common security mistakes with code examples. Load when: responding to a token compromise, reviewing code for security issues, or training on anti-patterns.Invoke this skill when:
Security best practices for Mapbox access tokens, including scope management, URL restrictions, rotation strategies, and protecting sensitive data. Use when creating, managing, or advising on Mapbox token security.
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
main, last pushed 16 September 2026.SKILL.md, not by matching a directory convention. One layout observed: skills/*/SKILL.md.h1 and no skipped levels:.claude-plugin/marketplace.json by Mapbox Plugin Marketplace, declaring 1 plugin. It is read for editorial metadata only — never as the skill index, which is always the repository tree./mapbox/mapbox-agent-skills.md, and each skill at its own .md URL.5 files · 15 KB
Everything this skill ships beside its prose. All of it is set here, as subchapters of skill 18.
Documentation the agent loads on demand, rather than up front.
Everything else published alongside the skill.