{"name":"io.github.paulieb89/pinescript-mcp","slug":"paulieb89-pinescript-mcp","title":"Pine Script v6 Documentation","description":"Pine Script v6 documentation lookup, function validation, and linting for AI code generation","url":"https://mcp.market/server/paulieb89-pinescript-mcp","rating":null,"grade":"A","score":90,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":35,"stars":9,"forks":2,"downloads_week":31,"last_push_at":"2026-08-27T10:55:20.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-05T10:55:48.993Z","last_ok_at":"2026-11-05T10:55:48.993Z","latency_ms":41},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/paulieb89/pinescript-mcp","website":"https://bouch.dev","version":"0.6.17","remotes":[{"type":"streamable-http","url":"https://pinescript-mcp.fly.dev/mcp"},{"type":"sse","url":"https://pinescript-mcp.fly.dev/sse"}],"packages":[{"registryType":"pypi","identifier":"pinescript-mcp","version":"0.6.17","runtimeHint":"uvx","transport":{"type":"stdio"}}],"tools":[{"name":"get_doc","description":"USE WHEN reading the full content of a Pine Script v6 documentation file.\nReturns the file content; when limit is set, a header shows the char range and offset to continue reading.\nAFTER 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.\nData sourced from bundled Pine Script v6 documentation.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"description":"Relative path to the documentation file (e.g., 'reference/functions/ta.md').","type":"string"},"limit":{"default":0,"description":"Maximum characters to return. Use 30000 for large files. 0 = no limit.","minimum":0,"type":"integer"},"offset":{"default":0,"description":"Character offset to start reading from.","minimum":0,"type":"integer"}},"required":["path"],"additionalProperties":false}},{"name":"get_functions","description":"USE WHEN browsing valid Pine Script v6 functions, optionally filtered to a namespace.\nReturns function names grouped by namespace (e.g. ta.*, strategy.*) or filtered to the requested namespace.\nAFTER calling this tool, call validate_function(fn_name) to check a specific name, or get_section() to read its documentation.\nData sourced from bundled pine_v6_functions.json.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"namespace":{"default":"","description":"Filter by namespace (e.g., 'ta', 'strategy', 'request'). Empty string returns all functions grouped by namespace.","type":"string"}},"additionalProperties":false}},{"name":"get_prompt","description":"Get a prompt by name with optional arguments.\n\nReturns the rendered prompt as JSON with a messages array.\nArguments should be provided as a dict mapping argument names\nto values.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"description":"The name of the prompt to get","type":"string"},"arguments":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"Optional arguments for the prompt"}},"required":["name"],"additionalProperties":false}},{"name":"get_section","description":"USE WHEN reading a specific named section from a Pine Script v6 documentation file.\nReturns the section content from the matched header to the next same-level header, with file path and line range.\nAFTER 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.\nData sourced from bundled Pine Script v6 documentation.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"description":"Documentation file path (e.g., 'reference/functions/strategy.md').","type":"string"},"header":{"description":"Header text to find (e.g., 'strategy.exit()' or '## strategy.exit()').","type":"string"},"include_children":{"default":true,"description":"Include nested subsections under the matched header.","type":"boolean"}},"required":["path","header"],"additionalProperties":false}},{"name":"list_docs","description":"USE WHEN discovering what Pine Script v6 documentation is available.\nReturns a categorised list of doc file paths with one-line descriptions.\nAFTER 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).\nData sourced from bundled Pine Script v6 documentation.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"list_prompts","description":"List all available prompts.\n\nReturns JSON with prompt metadata including name, description,\nand optional arguments.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"list_sections","description":"USE WHEN navigating a large documentation file before reading a specific section.\nReturns a newline-separated list of # and ## headers (### excluded) in the file.\nAFTER calling this tool, call get_section(path, header) with a header from this list.\nData sourced from bundled Pine Script v6 documentation.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"description":"Documentation file path (e.g., 'reference/functions/ta.md').","type":"string"}},"required":["path"],"additionalProperties":false}},{"name":"resolve_topic","description":"USE WHEN looking up an exact Pine Script API term or known concept keyword.\nReturns the best-matching doc paths with matched keywords and a retrieval suggestion (get_doc or list_sections + get_section).\nAFTER 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.\nData sourced from bundled TOPIC_MAP and doc file content scan.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"description":"Exact Pine Script term or known concept keyword (e.g., 'ta.rsi', 'strategy.entry', 'repainting').","minLength":1,"type":"string"}},"required":["query"],"additionalProperties":false}},{"name":"search_docs","description":"USE WHEN finding documentation sections that match specific terms across all Pine Script v6 docs.\nReturns up to max_results sections ranked by match count, each with a preview and a get_section() call hint.\nAFTER calling this tool, call get_section(file, header) for each result you want to read in full.\nData sourced from bundled Pine Script v6 documentation.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"description":"Search terms (case-insensitive). Multi-word queries match sections containing ALL terms.","minLength":1,"type":"string"},"max_results":{"default":5,"description":"Maximum sections to return.","maximum":20,"minimum":1,"type":"integer"}},"required":["query"],"additionalProperties":false}},{"name":"validate_function","description":"USE WHEN confirming a Pine Script v6 function name is valid before using it in code.\nReturns a valid/invalid verdict with namespace suggestions or known replacement hints (e.g. ta.adx → ta.dmi, security → request.security).\nAFTER calling this tool, call get_functions(namespace) to list all valid functions in the relevant namespace if the function is invalid.\nData sourced from bundled pine_v6_functions.json.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"fn_name":{"description":"Function name to validate (e.g., 'ta.sma', 'strategy.entry', 'plot').","minLength":1,"type":"string"}},"required":["fn_name"],"additionalProperties":false}}],"scan":{"score":90,"grade":"A","scanned_at":"2026-09-27T23:16:44.788Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T23:16:44.730Z","components":{"code":{"score":25,"max":25,"notes":["4 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1071ms"]},"poisoning":{"score":15,"max":15,"notes":["10 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":12,"max":15,"notes":["last push 32 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://pinescript-mcp.fly.dev/mcp","reachable":true,"authRequired":false,"latencyMs":1071,"serverInfo":{"name":"pinescript-docs","version":"3.3.0"}},{"url":"https://pinescript-mcp.fly.dev/sse","reachable":false,"authRequired":false,"latencyMs":495,"error":"SSE error: Non-200 status code (404)"}],"packages":[{"registryType":"pypi","identifier":"pinescript-mcp","version":"0.6.17","found":true,"weeklyDownloads":31,"license":"MIT","dependencyCount":7,"publishedAt":"2026-04-04T20:24:08.643600Z","repositoryUrl":"https://github.com/paulieb89/pinescript-mcp"}],"repo":{"found":true,"owner":"paulieb89","repo":"pinescript-mcp","archived":false,"pushedAt":"2026-08-27T10:55:20Z","stars":9,"forks":2,"openIssues":2,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/6341227?v=4","ownerCreatedAt":"2014-01-07T16:37:08Z","license":"MIT"},"icon":{"url":"https://bouch.dev/favicon.ico?favicon.0x3dzn~oxb6tn.ico?dpl=dpl_7Nn4XZTh5BUg67Y4NGVpvE86g1Qd","source":"site","width":256,"height":256},"presence":{"stars":9,"forks":2,"downloadsWeek":31,"license":"MIT","lastPushAt":"2026-08-27T10:55:20.000Z","score":35}}}},"grade_history":[],"reviews":[]}