Unofficial, self-hosted MCP server for the documented OpenSolar API.
Inferred from the transports this listing declares (stdio). A client not listed here hasn’t been ruled out — it just isn’t something Forge can confirm.
OPENSOLAR_API_TOKENAPI keyrequiredOpenSolar bearer token
Declared by the author in the official MCP registry. Forge does not store, broker, or ever see these values — the config below is scaffolded with placeholders you fill in locally.
Verification confirms publisher identity (repo ownership), not code safety. The security scan covers known CVEs and suspicious install scripts.
Read out of the source npm actually ships, at scan time. The package was never executed. Tools registered dynamically at runtime, or hidden inside bundled or minified code, can be missed — so this is a floor on the tool surface, not a complete census of it.
list_costingsLists one page of costings as `{ costings, page, limit }`. The only optional filter is boolean priority. Per-unit rates are omitted.Lists one page of costings as `{ costings, page, limit }`. The only optional filter is boolean priority. Per-unit rates are omitted.
No input schema was published for this tool.
get_costingReturns one costing by id: title, description, and boolean priority. Per-unit rates are omitted.Returns one costing by id: title, description, and boolean priority. Per-unit rates are omitted.
No input schema was published for this tool.
delete_costingprivilegedRemoves the costing from the live org. This call is not retried.Removes the costing from the live org. This call is not retried.
No input schema was published for this tool.
list_contactsLists one page of contacts as `{ contacts }`. Each contact includes `is_synthetic_email` for `@os.code` addresses. Passport, licence, and date of birth are redacted. Contacts have no created_date or modified_date.Lists one page of contacts as `{ contacts }`. Each contact includes `is_synthetic_email` for `@os.code` addresses. Passport, licence, and date of birth are redacted. Contacts have no created_date or modified_date.
No input schema was published for this tool.
search_contactsNo description publishedThis tool published no description. Forge does not invent one.
get_contactReturns one contact by id, including `is_synthetic_email`. Passport, licence, and date of birth are redacted. Contacts have no created_date or modified_date.Returns one contact by id, including `is_synthetic_email`. Passport, licence, and date of birth are redacted. Contacts have no created_date or modified_date.
No input schema was published for this tool.
create_contactAdds a person to the live org. Send only first_name, family_name, email, and phone. This call is not retried.Adds a person to the live org. Send only first_name, family_name, email, and phone. This call is not retried.
No input schema was published for this tool.
update_contactUpdates a person in the live org. Send at least one of first_name, family_name, email, and phone. This call is not retried.Updates a person in the live org. Send at least one of first_name, family_name, email, and phone. This call is not retried.
No input schema was published for this tool.
delete_contactprivilegedRemoves the person from the live org. This call is not retried.Removes the person from the live org. This call is not retried.
No input schema was published for this tool.
get_eventReturns one event by id. Adds `event_type_name` and omits `url` and `org`. Use an id from get_project events. Unknown types become `Unknown event type`.Returns one event by id. Adds `event_type_name` and omits `url` and `org`. Use an id from get_project events. Unknown types become `Unknown event type`.
No input schema was published for this tool.
list_event_typesReturns the OpenSolar event type ids and titles, including gaps. This is a copied docs table, not an API call.Returns the OpenSolar event type ids and titles, including gaps. This is a copied docs table, not an API call.
No input schema was published for this tool.
list_private_filesLists one page of private files as `{ private_files, page, limit }`. Each row is id, title, file tag titles, and project id. The download URL is omitted.Lists one page of private files as `{ private_files, page, limit }`. Each row is id, title, file tag titles, and project id. The download URL is omitted.
No input schema was published for this tool.
get_private_fileReturns one private file by id: title, file tag titles, project id, and size when OpenSolar sent it. The download URL stays on the server. `include_contents: true` downloads the file and refuses a body over 10 MB. Text is included for the model, capped at 100,000 characters. Images are image conten…Returns one private file by id: title, file tag titles, project id, and size when OpenSolar sent it. The download URL stays on the server. `include_contents: true` downloads the file and refuses a body over 10 MB. Text is included for the model, capped at 100,000 characters. Images are image conten…
No input schema was published for this tool.
create_private_fileCreates a private file in the live org from a path confined to OPENSOLAR_UPLOAD_ROOT on this server. Uploads are disabled until that root is configured. The resolved real path must remain inside the root, including through symlinks. The server reads that file as multipart title and file_contents. F…Creates a private file in the live org from a path confined to OPENSOLAR_UPLOAD_ROOT on this server. Uploads are disabled until that root is configured. The resolved real path must remain inside the root, including through symlinks. The server reads that file as multipart title and file_contents. F…
No input schema was published for this tool.
update_private_fileUpdates a private file title in the live org. The published sample sends only title. The download URL is omitted. This call is not retried.Updates a private file title in the live org. The published sample sends only title. The download URL is omitted. This call is not retried.
No input schema was published for this tool.
delete_private_fileprivilegedRemoves the private file from the live org. This call is not retried.Removes the private file from the live org. This call is not retried.
No input schema was published for this tool.
generate_project_documentCreates a project document in the live org and returns the private file id. Omit format for the document type's default. pdf and csv set file_format on generate_document; docx calls generate_document_docx. The call sends action=save so OpenSolar stores a private file. File bytes are not returned. U…Creates a project document in the live org and returns the private file id. Omit format for the document type's default. pdf and csv set file_format on generate_document; docx calls generate_document_docx. The call sends action=save so OpenSolar stores a private file. File bytes are not returned. U…
No input schema was published for this tool.
get_orgReturns the connected OpenSolar org: id, name, address, contact info, and measurement units. `verbose: true` returns the full redacted payload.Returns the connected OpenSolar org: id, name, address, contact info, and measurement units. `verbose: true` returns the full redacted payload.
No input schema was published for this tool.
list_rolesLists roles in the connected org as `{ roles }`: id, display, email, phone, job title, and is_admin. Chat API keys are omitted.Lists roles in the connected org as `{ roles }`: id, display, email, phone, job title, and is_admin. Chat API keys are omitted.
No input schema was published for this tool.
get_roleReturns one role by id: display, email, phone, job title, and is_admin. Chat API keys are omitted. Optional fieldset is list only.Returns one role by id: display, email, phone, job title, and is_admin. Chat API keys are omitted. Optional fieldset is list only.
No input schema was published for this tool.
list_payment_optionsLists one page of payment options as `{ payment_options, page, limit }`. Optional filters are payment_type, auto_apply_enabled, and priority. `configuration_json` is omitted.Lists one page of payment options as `{ payment_options, page, limit }`. Optional filters are payment_type, auto_apply_enabled, and priority. `configuration_json` is omitted.
No input schema was published for this tool.
get_payment_optionReturns one payment option by id: title, payment type, priority, auto-apply, and archived. `configuration_json` is omitted.Returns one payment option by id: title, payment type, priority, auto-apply, and archived. `configuration_json` is omitted.
No input schema was published for this tool.
delete_payment_optionprivilegedRemoves the payment option from the live org. This call is not retried.Removes the payment option from the live org. This call is not retried.
No input schema was published for this tool.
list_pricing_schemesLists one page of pricing schemes as `{ pricing_schemes, page, limit }`. Optional filters are priority, auto_apply_enabled, and pricing_formula. `configuration_json` is omitted.Lists one page of pricing schemes as `{ pricing_schemes, page, limit }`. Optional filters are priority, auto_apply_enabled, and pricing_formula. `configuration_json` is omitted.
No input schema was published for this tool.
get_pricing_schemeReturns one pricing scheme by id: title, formula, priority, auto-apply, and archived. `configuration_json` is omitted.Returns one pricing scheme by id: title, formula, priority, auto-apply, and archived. `configuration_json` is omitted.
No input schema was published for this tool.
delete_pricing_schemeprivilegedRemoves the pricing scheme from the live org. This call is not retried.Removes the pricing scheme from the live org. This call is not retried.
No input schema was published for this tool.
list_projectsLists one page of projects in the connected org. Default result is `{ projects, page, limit }` with id, title, address, dates, stage, stage_milestone, and workflow ids when OpenSolar sent them. `verbose: true` returns `{ projects, page, limit }` with the full redacted list objects. Use search_proje…Lists one page of projects in the connected org. Default result is `{ projects, page, limit }` with id, title, address, dates, stage, stage_milestone, and workflow ids when OpenSolar sent them. `verbose: true` returns `{ projects, page, limit }` with the full redacted list objects. Use search_proje…
No input schema was published for this tool.
search_projectsNo description publishedThis tool published no description. Forge does not invent one.
get_projectReturns one project by id: address, stage, stage_milestone, workflow ids, contacts, assigned role, system_count, design_available, and events. Use it for fields a search row does not include. When search_projects reports `resolution: unique`, that target does not need this call before a write. `ver…Returns one project by id: address, stage, stage_milestone, workflow ids, contacts, assigned role, system_count, design_available, and events. Use it for fields a search row does not include. When search_projects reports `resolution: unique`, that target does not need this call before a write. `ver…
No input schema was published for this tool.
get_project_snapshotNo description publishedThis tool published no description. Forge does not invent one.
create_projectCreates a project in the live org. A new project can be blocked when the wallet is empty. API Access uses project-level paid entitlement while it is enabled. This call is not retried.Creates a project in the live org. A new project can be blocked when the wallet is empty. API Access uses project-level paid entitlement while it is enabled. This call is not retried.
No input schema was published for this tool.
update_projectUpdates address, notes, and related fields on one project in the live org. Send at least one field besides id. Stage, design, workflow, and usage are not accepted. This call is not retried.Updates address, notes, and related fields on one project in the live org. Send at least one field besides id. Stage, design, workflow, and usage are not accepted. This call is not retried.
No input schema was published for this tool.
update_project_stageSets the workflow stage on a project in the live org. Send active_stage_id with workflow_id, or stage_name. A stage title is resolved on that workflow and never matches an archived stage. No match or two matches with the same title do not PATCH. The deprecated stage field is not accepted. This call…Sets the workflow stage on a project in the live org. Send active_stage_id with workflow_id, or stage_name. A stage title is resolved on that workflow and never matches an archived stage. No match or two matches with the same title do not PATCH. The deprecated stage field is not accepted. This call…
No input schema was published for this tool.
update_project_usageSets energy consumption on a project in the live org. Only the usage object is sent. values must match the source: one integer for annual, 12, 6, or 4 integers for the period sources, or Low, Medium, or High for estimate. This call is not retried.Sets energy consumption on a project in the live org. Only the usage object is sent. values must match the source: one integer for annual, 12, 6, or 4 integers for the period sources, or Low, Medium, or High for estimate. This call is not retried.
No input schema was published for this tool.
delete_projectprivilegedRemoves the project from the live org. This call is not retried.Removes the project from the live org. This call is not retried.
No input schema was published for this tool.
get_proposal_dataReturns proposal figures for one project: system name, annual kWh, monthly kWh, payback year, net present value, IRR, and return on investment. Requires Raw Data API Access. A 402 means this org does not have that plan. One inaccessible project returns 403. A compressed output string is decoded on…Returns proposal figures for one project: system name, annual kWh, monthly kWh, payback year, net present value, IRR, and return on investment. Requires Raw Data API Access. A 402 means this org does not have that plan. One inaccessible project returns 403. A compressed output string is decoded on…
No input schema was published for this tool.
get_project_designNo description publishedThis tool published no description. Forge does not invent one.
list_roof_typesReturns the OpenSolar roof type ids and titles. This is a copied docs table, not an API call.Returns the OpenSolar roof type ids and titles. This is a copied docs table, not an API call.
No input schema was published for this tool.
list_file_tagsReturns private-file tag titles. The title is the identifier. This is a copied docs table, not an API call.Returns private-file tag titles. The title is the identifier. This is a copied docs table, not an API call.
No input schema was published for this tool.
list_project_systemsLists one page of systems for a project as `{ systems, page, limit }`. Each row has id, name, size, module count, battery kWh, annual output, and price. Not the full pricing breakdown.Lists one page of systems for a project as `{ systems, page, limit }`. Each row has id, name, size, module count, battery kWh, annual output, and price. Not the full pricing breakdown.
No input schema was published for this tool.
36 of 40 tools published a description.
Tool names and descriptions are written by the publisher and shown verbatim as inert text. They are the strings an MCP client passes to a model, so Forge scans them for prompt-injection patterns — any finding appears with the security scan above. “Privileged” is a keyword match on the tool name, not an audit of what the tool does: a benign-sounding name can still do anything.
Unofficial, self-hosted MCP server for the documented OpenSolar API.
Linked names open Forge’s index of every entry observed exposing that tool. Browse all indexed tools.
Not followed: peerDependencies. This tree covers runtime dependencies only, so anything those pull in was never resolved.