# Pine Script v6 Documentation

> Pine Script v6 documentation lookup, function validation, and linting for AI code generation

- name: io.github.paulieb89/pinescript-mcp
- version: 0.6.17
- connection class: R0 (autonomous)
- trust: 86/100
- quality: 88/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.paulieb89%2Fpinescript-mcp
- tools: https://api.protogrid.dev/v1/servers/io.github.paulieb89%2Fpinescript-mcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "pinescript-mcp": {
      "type": "http",
      "url": "https://pinescript-mcp.fly.dev/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 45
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-100% -stale-199d
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 88/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 8 of 10 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_prompt (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_section (destructiveHint); get_functions (destructiveHint); …
- pass `tools.token_cost`: about 1,652 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: 100 (weight 15)

- pass `deps.known_vulns`: no known advisory in 72 resolved packages
- pass `deps.mcp_sdk_version`: mcp 2.2.0, no known advisory
- pass `deps.resolvable`: pinescript-mcp@0.6.17 resolved: 72 packages

- tools: 10, about 1,652 tokens to load them all
- tool set hash: a57bd246ad222d0ca39c7a107e087daf
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.paulieb89/pinescript-mcp.svg)](https://protogrid.dev/servers/io.github.paulieb89/pinescript-mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Dependencies

- pypi pinescript-mcp@0.6.17: resolved, 71 dependencies, MCP SDK mcp 2.2.0

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://pinescript-mcp.fly.dev/mcp (streamable-http, auth none, reachable true, uptime30d 1)
- https://pinescript-mcp.fly.dev/sse (sse, auth unknown, reachable false, uptime30d 0)

## Packages

- pypi pinescript-mcp@0.6.17

## Tools (10)

- `get_doc`: USE WHEN reading the full content of a Pine Script v6 documentation file.
Returns the file content; when limit is set, a header shows the char range and offset to continue reading.
AFTER calling this tool, use offset=<end> to continue if the header indicates more content is available. For large files (ta.md, strategy.md, collections.md, drawing.md, general.md), prefer list_sections() + get_section() instead.
Data sourced from bundled Pine Script v6 documentation.
- `get_functions`: USE WHEN browsing valid Pine Script v6 functions, optionally filtered to a namespace.
Returns function names grouped by namespace (e.g. ta.*, strategy.*) or filtered to the requested namespace.
AFTER calling this tool, call validate_function(fn_name) to check a specific name, or get_section() to read its documentation.
Data sourced from bundled pine_v6_functions.json.
- `get_prompt`: Get a prompt by name with optional arguments.

Returns the rendered prompt as JSON with a messages array.
Arguments should be provided as a dict mapping argument names
to values.
- `get_section`: USE WHEN reading a specific named section from a Pine Script v6 documentation file.
Returns the section content from the matched header to the next same-level header, with file path and line range.
AFTER calling this tool, call list_sections(path) if the header was not found, or get_section() again with a child header for a narrower subsection.
Data sourced from bundled Pine Script v6 documentation.
- `list_docs`: USE WHEN discovering what Pine Script v6 documentation is available.
Returns a categorised list of doc file paths with one-line descriptions.
AFTER calling this tool, call get_doc(path) for small files or list_sections(path) then get_section(path, header) for large files (ta.md, strategy.md, collections.md, drawing.md, general.md).
Data sourced from bundled Pine Script v6 documentation.
- `list_prompts`: List all available prompts.

Returns JSON with prompt metadata including name, description,
and optional arguments.
- `list_sections`: USE WHEN navigating a large documentation file before reading a specific section.
Returns a newline-separated list of # and ## headers (### excluded) in the file.
AFTER calling this tool, call get_section(path, header) with a header from this list.
Data sourced from bundled Pine Script v6 documentation.
- `resolve_topic`: USE WHEN looking up an exact Pine Script API term or known concept keyword.
Returns the best-matching doc paths with matched keywords and a retrieval suggestion (get_doc or list_sections + get_section).
AFTER calling this tool, follow the suggestion: call get_doc() for small files or list_sections() + get_section() for large files. For natural language questions use search_docs() instead.
Data sourced from bundled TOPIC_MAP and doc file content scan.
- `search_docs`: USE WHEN finding documentation sections that match specific terms across all Pine Script v6 docs.
Returns up to max_results sections ranked by match count, each with a preview and a get_section() call hint.
AFTER calling this tool, call get_section(file, header) for each result you want to read in full.
Data sourced from bundled Pine Script v6 documentation.
- `validate_function`: USE WHEN confirming a Pine Script v6 function name is valid before using it in code.
Returns a valid/invalid verdict with namespace suggestions or known replacement hints (e.g. ta.adx → ta.dmi, security → request.security).
AFTER calling this tool, call get_functions(namespace) to list all valid functions in the relevant namespace if the function is invalid.
Data sourced from bundled pine_v6_functions.json.
