Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.w8s/w8s-astro-mcp

PYPI · W8S-ASTRO-MCP

Natal charts, transits, history, ingress forecasting, aspects, composite & Davison charts — SQLite.

Available components

+15 this week 94 Trust /100

Last scanned (17 hours ago)

Scores higher than 97% of PyPI servers

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 1 of 46 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to w8s/w8s-astro-mcp). View diagnostics → Pass
  • Clear OSI-approved license (AGPL-3.0-or-later).Pass
  • Actively maintained (last published 23 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability73
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4667 tokens (~150/item across 31 items; 31 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_connection" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 32 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Nov 26 +1
    • Stability: 0.97 → pass security
  • 2 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 1 Nov 26 −16
    • Malware scan: pass → unverified ▼ security
    • Stability: pass → 0.93 functional
  • 30 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 28 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 27 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 19 Oct 26 +1
    • Stability: 0.97 → pass security
  • 18 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed pypi/w8s-astro-mcp@0.15.2

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo w8s/w8s-astro-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/w8s/w8s-astro-mcp/.github/workflows/publish.yml@refs/tags/0.15.2
Rekor log index 3213494161
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:f300117bdd169eab4cddec8ce87123768718b7ce7ab4c6eb5df79aeec39a3d57

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 46 packages
Packages resolved 46
Stale 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 31 exposed · ~4,471 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_connection_member ~61

Add a profile to an existing connection. Note: adding a member invalidates any cached charts for this connection.

NameTypeReqDescription
connection_idintegeryesConnection ID (from list_connections)
profile_idintegeryesProfile ID to add (from list_profiles)

No output schema declared.

No examples provided.

add_location ~130

Add a saved location (home, office, travel destination, etc.) for a profile. Every location must belong to a specific profile.

NameTypeReqDescription
labelstringyesLocation label (e.g., 'Office', 'Vacation Home')
latitudenumberyesLatitude in decimal degrees
longitudenumberyesLongitude in decimal degrees
profile_idintegeryesProfile ID this location belongs to (required)
set_as_homeboolean–Optional: Set as current home location for this profile
timezonestringyesTimezone (e.g., 'America/Los_Angeles')

No output schema declared.

No examples provided.

cast_event_chart ~263

Cast an astrological chart for any date, time, and location. No profile required — useful for historical events, mundane astrology, and electional work. If 'label' is provided, the chart is saved to the database and can be referenced later via compare_charts using 'event:<label>'. If 'label' is omitted, the chart is calculated and returned but not saved.

NameTypeReqDescription
datestringyesDate in YYYY-MM-DD format
descriptionstring–Optional notes about this event
labelstring–Optional unique name to save this chart for later reference. If omitted, chart is calculated but not saved. Must be unique among all saved event charts.
latitudenumberyesLatitude in decimal degrees
location_namestringyesHuman-readable location name (e.g., 'Chicago, IL')
longitudenumberyesLongitude in decimal degrees
profile_idinteger–Optional profile ID to associate this event with a person
timestringyesTime in HH:MM format, local time at the given location (converted to UT using the timezone)
timezonestringyesIANA timezone name (e.g., 'America/Chicago'); used to convert the local time to UT

No output schema declared.

No examples provided.

check_ephemeris ~62

Check the current ephemeris mode and precision level. Reports whether the built-in Moshier ephemeris (~1 arcminute) or Swiss Ephemeris data files (~0.001 arcsecond) are active, and shows the pysweph version.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

compare_charts ~496

Calculate aspects between two charts. Use for synastry (comparing two natal charts), transits (comparing natal chart with current positions), or event chart analysis. Finds conjunctions, oppositions, trines, squares, sextiles, and minor aspects. Each aspect names the chart each body belongs to (natal, transit, event) and, when a chart carries planet speeds (transit charts), whether the aspect is applying or separating with an estimated time of exactness. Times are UT. Transit-chart angles use the owner's current home location.

NameTypeReqDescription
chart1_datestringyesDate for first chart (YYYY-MM-DD), use 'natal' for a natal chart, or 'event:<label>' for a saved event chart
chart1_profile_idinteger–Profile ID for chart1 when chart1_date is 'natal' (from list_profiles). Defaults to owner profile.
chart1_timestring–Time for first chart in HH:MM format, interpreted as UT (optional, defaults to 12:00)
chart2_datestringyesDate for second chart (YYYY-MM-DD), use 'natal' for a natal chart, 'today' for current, or 'event:<label>' for a saved event chart
chart2_profile_idinteger–Profile ID for chart2 when chart2_date is 'natal' (from list_profiles). Defaults to owner profile.
chart2_timestring–Time for second chart in HH:MM format, interpreted as UT (optional, defaults to 12:00)
formatstring–Output format. 'text' (default) is human-readable. 'json' returns structured data with numeric orb, applying, days_to_exact and exact_utc fields.
include_anglesstring–Which charts contribute their angles (Ascendant, MC, etc.). 'natal' uses only the natal chart's angles - the usual choice for transits, since the transit sky's own angles change every few minutes and…
orb_multipliernumber–Multiplier for aspect orbs (optional, default 1.0)
planets_onlyboolean–Legacy switch, kept for compatibility: true (default) compares planets only; false also compares the angles of both charts. Prefer include_angles, which overrides this.

No output schema declared.

No examples provided.

create_connection ~127

Create a new connection between two or more profiles for synastry or composite/Davison chart analysis. Requires at least 2 profile IDs. Use list_profiles to find profile IDs first.

NameTypeReqDescription
labelstringyesName for this connection (e.g., 'Alice & Bob', 'Family Trio')
profile_idsarrayyesList of profile IDs to include (minimum 2)
start_datestring–Optional date the relationship began (YYYY-MM-DD)
typestring–Optional connection type (e.g., 'romantic', 'family', 'business')

No output schema declared.

No examples provided.

create_profile ~270

Create a new astrological profile (for friends, family, synastry analysis, etc.). After creating, ask user if this should be their current profile. IMPORTANT: Ask for information conversationally: 1. Ask: 'What's their name?' 2. Ask: 'What's their birthday?' (get YYYY-MM-DD) 3. Ask: 'Do you know what time they were born? (If not, we can use 12:00)' 4. Ask: 'Where were they born?' (get city, state/country) Then look up coordinates and confirm before saving.

NameTypeReqDescription
birth_datestringyesBirth date in YYYY-MM-DD format
birth_latitudenumberyesLatitude in decimal degrees
birth_location_namestringyesLocation name (e.g., 'New York, NY')
birth_longitudenumberyesLongitude in decimal degrees
birth_timestringyesBirth time in HH:MM format (24-hour), local time at the birth location (converted to UT using birth_timezone)
birth_timezonestringyesIANA timezone of the birth location (e.g., 'America/New_York'); used to convert the local birth time to UT
namestringyesPerson's name (e.g., 'Sarah Johnson')

No output schema declared.

No examples provided.

delete_connection ~58

Delete a connection and all its cached charts. WARNING: Permanent and cannot be undone. Does not affect the member profiles themselves.

NameTypeReqDescription
confirmbooleanyesMust be true to confirm deletion
connection_idintegeryesConnection ID to delete

No output schema declared.

No examples provided.

delete_event_chart ~52

Delete a saved event chart by label. WARNING: Permanent and cannot be undone.

NameTypeReqDescription
confirmbooleanyesMust be true to confirm deletion
labelstringyesLabel of the event chart to delete

No output schema declared.

No examples provided.

delete_profile ~81

Delete a profile from the database. WARNING: This is permanent and cannot be undone. Deletes the profile and all associated natal chart data. If this is the owner profile, owner_profile_id will be set to NULL.

NameTypeReqDescription
confirmbooleanyesMust be true to confirm deletion
profile_idintegeryesProfile ID to delete (get from list_profiles)

No output schema declared.

No examples provided.

dismiss_data_notice ~81

Stop the 'Data notice' about stored natal charts that need recalculating, until a different chart becomes affected. Call this ONLY when the user asks not to be reminded; it does not fix anything. Use undo=true to bring the notice back.

NameTypeReqDescription
undoboolean–If true, bring the notice back instead of dismissing it (default false)

No output schema declared.

No examples provided.

download_ephemeris_files ~125

Download Swiss Ephemeris data files for higher-precision calculations. Upgrades from built-in Moshier ephemeris (~1 arcminute) to full Swiss Ephemeris files (~0.001 arcsecond). Downloads ~2 MB from the official Swiss Ephemeris GitHub repository to ~/.w8s-astro-mcp/ephe/. Use check_ephemeris first to see current precision mode.

NameTypeReqDescription
confirmboolean–Must be true to proceed. Omit or set false to preview file details (names, sizes, source, destination) first.

No output schema declared.

No examples provided.

find_electional_windows ~387

Scan a time window and return candidate moments that satisfy electional astrology criteria. Useful for finding auspicious times to start a project, sign a contract, hold an event, etc. Scans at a configurable interval (default 60 minutes) and scores each moment against the requested criteria. Returns candidates ranked by score (most criteria met first), then by tightness. Maximum window: 90 days. Maximum interval: 360 minutes (6 hours). Minimum interval: 15 minutes. Available criteria: - moon_not_void: Moon is not void of course - no_retrograde_inner: Mercury and Venus are direct - no_retrograde_outer: Mars through Pluto are direct - no_retrograde_all: All planets are direct - moon_waxing: Moon is waxing (New to Full) - moon_waning: Moon is waning (Full to New) - benefic_angular: Venus or Jupiter in houses 1, 4, 7, or 10 - asc_not_late: Ascendant is not in the last 3° of its sign

NameTypeReqDescription
criteriaarrayyesCriteria to evaluate at each interval
end_datestringyesEnd of scan window (YYYY-MM-DD, max 90 days from start)
interval_minutesinteger–Minutes between scan steps (15–360, default 60)
latitudenumberyesLatitude for the charts
location_namestringyesHuman-readable location name
longitudenumberyesLongitude for the charts
max_resultsinteger–Maximum number of candidates to return (default 10)
start_datestringyesStart of scan window (YYYY-MM-DD)
timezonestringyesIANA timezone: start_date and end_date are local dates in this timezone, and results are shown in local time

No output schema declared.

No examples provided.

find_house_placements ~229

Determine which house each planet occupies in a chart. Can use a natal chart (via profile_id or owner default) or a connection chart (composite/Davison via connection_id + chart_type) as the house reference frame. Shows both which planets are in each house and which house each planet is in.

NameTypeReqDescription
chart_typestring–Which connection chart to use as the house reference frame. Required when connection_id is supplied.
connection_idinteger–Connection ID whose composite/Davison houses to use as the reference frame (from list_connections). Requires chart_type. Mutually exclusive with profile_id.
datestringyesDate for the planets to place (YYYY-MM-DD), 'natal' for birth chart planets, or 'today' for current sky
profile_idinteger–Profile ID whose natal houses to use as the reference frame (from list_profiles). Defaults to owner profile. Mutually exclusive with connection_id.
timestring–Time in HH:MM format, interpreted as UT (optional, defaults to 12:00)

No output schema declared.

No examples provided.

find_last_transit ~173

Find the most recent logged transit where a planet met specific conditions. Examples: 'when was Mercury last retrograde?', 'when was the Moon last in Scorpio?', 'when was Mars last in my 7th house?'. Requires at least one of: sign, retrograde, or house.

NameTypeReqDescription
houseinteger–Natal house number to match, 1-12 (optional)
planetstringyesPlanet name, e.g. 'Mercury', 'Mars'
profile_idinteger–Profile ID to query (from list_profiles). Defaults to owner profile.
retrogradeboolean–If true, find last retrograde; if false, find last direct (optional)
signstring–Zodiac sign to match, e.g. 'Capricorn' (optional)

No output schema declared.

No examples provided.

get_connection_chart ~161

Calculate (or retrieve cached) a composite or Davison chart for a connection. COMPOSITE: Each planet position is the circular mean of all members' natal positions. No swetest call needed — pure math on cached natal data. DAVISON: A real chart cast for the midpoint datetime and location of all members' births. Requires a swetest call. Birth times are converted to UTC before averaging, so timezone data in each profile's birth location is used. Results are cached in the database. Use invalidate=true to force recalculation.

NameTypeReqDescription
chart_typestringyesType of chart to calculate
connection_idintegeryesConnection ID (from list_connections)
invalidateboolean–Force recalculation even if cached (default: false)

No output schema declared.

No examples provided.

get_ingresses ~256

Scan the ephemeris for upcoming or recent planetary sign ingresses and stations (retrograde/direct). Examples: 'what transits are coming up this month?', 'when does Mercury go retrograde?', 'show me major transits next April', 'what were the outer planet movements during the Renaissance?'. Use offset to shift the window from today. Use extended=true for historical or far-future windows (outer planets only).

NameTypeReqDescription
daysinteger–Number of days to scan. Normal mode: default 30, max 365. Extended mode: default 30, max 3650.
extendedboolean–If true, removes offset cap and raises scan cap to 3650 days, but only returns outer planets (Jupiter through Pluto). Inner planets are excluded in extended mode — they produce thousands of events ov…
futureboolean–True = scan forward from today+offset (default), False = backward
offsetinteger–Days from today to start the scan window (default 0). Normal mode: max 36500 (~100 years). Extended mode: uncapped.

No output schema declared.

No examples provided.

get_natal_chart ~57

Get the natal chart (birth chart) planetary positions for a profile. Defaults to the owner profile if no profile_id is supplied.

NameTypeReqDescription
profile_idinteger–Profile ID to query (from list_profiles). Defaults to owner profile.

No output schema declared.

No examples provided.

get_transit_history ~198

Query historical transit lookups stored in the database for a profile. Defaults to the owner profile. Supports filtering by date range, planet, and sign. Examples: 'show me last month\'s transits', 'when was Mercury in Capricorn?', 'what sign was Jupiter in last year?'

NameTypeReqDescription
afterstring–Return lookups on or after this date (YYYY-MM-DD, optional)
beforestring–Return lookups on or before this date (YYYY-MM-DD, optional)
limitinteger–Max number of results to return (default 20, max 100)
planetstring–Filter by planet name, e.g. 'Mercury' (optional)
profile_idinteger–Profile ID to query (from list_profiles). Defaults to owner profile.
signstring–Filter by zodiac sign, e.g. 'Capricorn' — requires planet (optional)

No output schema declared.

No examples provided.

get_transits ~172

Get planetary transits for a specific date and location. Location can be a saved label ('home', 'work', 'birth'), or any city/place name ('Seattle', 'Bangkok, Thailand', 'Paris') — unknown names are geocoded automatically. Defaults to current home location if omitted.

NameTypeReqDescription
datestring–Date in YYYY-MM-DD format (optional, defaults to today)
locationstring–Saved label ('home', 'work', 'birth') or any city name ('Bangkok, Thailand', 'Seattle, WA'). Defaults to 'current'.
profile_idinteger–Profile ID to query (from list_profiles). Defaults to owner profile.
timestring–Time in HH:MM format, interpreted as UT (optional, defaults to 12:00)

No output schema declared.

No examples provided.

list_connections ~28

List all connections with their member names and IDs. Use this to find connection IDs before requesting charts.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_event_charts ~61

List all saved event charts. Shows label, date/time, location, and optional description. Saved charts can be used in compare_charts via 'event:<label>'.

NameTypeReqDescription
profile_idinteger–Optional: filter to events associated with a specific profile

No output schema declared.

No examples provided.

list_profiles ~45

List all astrological profiles in the database. Shows profile names, birth dates, and which is currently active. Use this to see all available profiles before creating, updating, or switching.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

remove_connection_member ~62

Remove a profile from a connection. Connection must retain at least 2 members. Note: removing a member invalidates any cached charts.

NameTypeReqDescription
connection_idintegeryesConnection ID (from list_connections)
profile_idintegeryesProfile ID to remove

No output schema declared.

No examples provided.

remove_location ~44

Remove a saved location. WARNING: Cannot remove locations that are set as birth locations for profiles.

NameTypeReqDescription
location_idintegeryesLocation ID to remove (get from view_config)

No output schema declared.

No examples provided.

setup_astro_config ~233

Configure birth data and location for transit calculations. IMPORTANT: Ask the user for information conversationally in steps: 1. Ask: 'What's your birthday?' (get YYYY-MM-DD) 2. Ask: 'Do you know what time you were born? (If not, we can use 12:00)' (get HH:MM) 3. Ask: 'Where were you born?' (get city, state/country) Then look up coordinates and confirm with user before saving.

NameTypeReqDescription
birth_datestringyesBirth date in YYYY-MM-DD format
birth_latitudenumberyesLatitude in decimal degrees
birth_location_namestringyesLocation name (e.g., 'Richardson, TX')
birth_longitudenumberyesLongitude in decimal degrees
birth_timestringyesBirth time in HH:MM format (24-hour), local time at the birth location (converted to UT using the timezone)
birth_timezonestringyesIANA timezone of the birth location (e.g., 'America/Chicago'); used to convert the local birth time to UT

No output schema declared.

No examples provided.

setup_owner ~92

Set who you are — the human operating this server. This is a one-time setup step, not a session operation. The owner profile is the stable identity used as the default for get_natal_chart, get_transits, and all other tools when no profile_id is supplied. Use list_profiles to find your profile_id.

NameTypeReqDescription
profile_idintegeryesProfile ID to set as owner (get from list_profiles)

No output schema declared.

No examples provided.

update_profile ~94

Update a profile field (name, birth date, birth time, etc.). Use with caution - changing birth data invalidates cached natal chart. Valid fields: name, birth_date, birth_time

NameTypeReqDescription
fieldstringyesField to update (name, birth_date, birth_time)
profile_idintegeryesProfile ID to update (get from list_profiles)
valuestringyesNew value for the field

No output schema declared.

No examples provided.

view_config ~20

View current astrological configuration (birth data and saved locations)

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

visualize_natal_chart ~117

Generate a circular natal chart visualization and save to file. Creates a traditional astrological chart wheel with zodiac signs, houses, planets, and angles.

NameTypeReqDescription
output_pathstring–Path where to save the chart image (e.g., '~/Downloads/natal_chart.png'). Defaults to 'natal_chart.png' in current directory.
profile_idinteger–Profile ID to visualize (from list_profiles). Defaults to owner profile.
titlestring–Custom title for the chart (optional, defaults to 'Natal Chart')

No output schema declared.

No examples provided.

visualize_placement_dials ~236

Create an interactive page for learning what a planet, a sign and a house mean, alone and together. Three dials (planet, sign, house) can be turned or switched off, and the reading shows each layer by itself and how the layers combine. The chart's own placements and house cusps are loaded as quick picks. Saves one HTML file to open in a browser.

NameTypeReqDescription
open_in_browserboolean–Open the page in the default browser after saving. Defaults to false; ask the user before turning it on.
output_pathstring–Where to save the page: a file path, or a file path ending in .html or .htm, or a folder (the file is then named placement_dials_<profile name>.html). Defaults to ~/Downloads/placement_dials_<profile…
profile_idinteger–Profile ID to use (from list_profiles). Defaults to owner profile.
titlestring–Heading above the placement quick picks (optional, defaults to 'Natal placements')

No output schema declared.

No examples provided.

Install

How do I install the io.github.w8s/w8s-astro-mcp server?

io.github.w8s/w8s-astro-mcp runs locally as a PyPI package, launched with uvx w8s-astro-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · w8s-astro-mcp

# add to Claude Code
claude mcp add w8s-w8s-astro-mcp -- uvx w8s-astro-mcp
Common questions

What is the io.github.w8s/w8s-astro-mcp server?

io.github.w8s/w8s-astro-mcp is listed in the public MCP registry as io.github.w8s/w8s-astro-mcp. Natal charts, transits, history, ingress forecasting, aspects, composite & Davison charts, SQLite. This page covers its PyPI package (w8s-astro-mcp).

Is the io.github.w8s/w8s-astro-mcp server safe to use?

io.github.w8s/w8s-astro-mcp scores 94 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.w8s/w8s-astro-mcp server expose?

io.github.w8s/w8s-astro-mcp exposes 31 tools: add_connection_member, add_location, cast_event_chart, check_ephemeris, compare_charts, and 26 more. Their descriptions and schemas cost roughly 4,471 tokens of context every time the server is loaded.

Is the io.github.w8s/w8s-astro-mcp server still maintained?

io.github.w8s/w8s-astro-mcp is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.w8s/w8s-astro-mcp server under?

io.github.w8s/w8s-astro-mcp declares the AGPL-3.0-or-later licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.