Main Page: Difference between revisions
No edit summary |
No edit summary |
||
| Line 162: | Line 162: | ||
|tool={{{tool}}} | |tool={{{tool}}} | ||
|country={{{country}}} | |country={{{country}}} | ||
|region={{{region}}} | |region={{{region|}}} | ||
|library_name={{{library_name}}} | |library_name={{{library_name}}} | ||
|weekday_hours={{{weekday_hours}}} | |weekday_hours={{{weekday_hours}}} | ||
| Line 173: | Line 173: | ||
</includeonly> | </includeonly> | ||
</pre> | </pre> | ||
'''Important note about <code>region</code>:''' Even if your tool doesn't use regions (e.g., it's only for one country), you MUST include the <code>region</code> field in your template. The <code>{{Tool}}</code> template queries all resource tables expecting both <code>country</code> and <code>region</code> fields. You can leave it empty when using the template (e.g., <code>|region=</code>). | |||
'''Key parts:''' | '''Key parts:''' | ||
* '''<code>_table</code>''': Must be <code>YourToolNameResources</code> (this is important for the MCP server!) | * '''<code>_table</code>''': Must be <code>YourToolNameResources</code> (this is important for the MCP server!) | ||
* ''' | * '''Required baseline fields''': ALL resource tables MUST include these fields: | ||
** <code>tool=Page</code> - The tool page reference | |||
** <code>country=String</code> - Country name | |||
** <code>region=String</code> - Region/state (can be left empty if not needed) | |||
** <code>last_verified=Date</code> - Verification date | |||
* '''Custom fields''': Add whatever additional fields your tool needs with their types (String, Date, URL, Text, Integer, etc.) | |||
* '''Display template''': Create a nice visual display for the data | * '''Display template''': Create a nice visual display for the data | ||
* '''<code>cargo_store</code>''': Saves the data to the Cargo database | * '''<code>cargo_store</code>''': Saves the data to the Cargo database (must include all declared fields) | ||
'''Step 2: Create the Tool Page''' | '''Step 2: Create the Tool Page''' | ||
| Line 350: | Line 357: | ||
Note: You can add multiple resources to the same page! | Note: You can add multiple resources to the same page! | ||
=== Example: Adding BTO Launches (Single-Country Tool) === | |||
The [[Tool:UpcomingBTO]] uses [[Template:UpcomingBTOResource]] which has fields for: | |||
* Launch month | |||
* Location (estate/area) | |||
* Unit count | |||
* Flat types (2R, 3R, 4R, etc.) | |||
* Classification (Standard/Plus/Prime) | |||
This is an example of a '''single-country tool''' - it only applies to Singapore. Even though it doesn't use the <code>region</code> field, the field must still exist in the template schema. We simply leave it empty when creating resources. | |||
Create a page: <code>Resource:UpcomingBTO/Feb2026</code> | |||
<pre> | |||
{{UpcomingBTOResource | |||
|tool=Tool:UpcomingBTO | |||
|country=Singapore | |||
|region= | |||
|launch_month=February 2026 | |||
|location=Bukit Merah | |||
|unit_count=1040 | |||
|flat_types=2R Flexi, 3R, 4R | |||
|classification=Prime | |||
|last_verified=2025-12-26 | |||
}} | |||
{{UpcomingBTOResource | |||
|tool=Tool:UpcomingBTO | |||
|country=Singapore | |||
|region= | |||
|launch_month=February 2026 | |||
|location=Tampines (near MRT) | |||
|unit_count=800 | |||
|flat_types=3R, 4R, 5R | |||
|classification=Standard | |||
|last_verified=2025-12-26 | |||
}} | |||
</pre> | |||
Notice: <code>|region=</code> is empty but must be included! | |||
== How Resource Templates Work == | == How Resource Templates Work == | ||
| Line 359: | Line 407: | ||
! Template | ! Template | ||
! Custom Fields | ! Custom Fields | ||
! Notes | |||
|- | |- | ||
| [[Tool:SuicideHotline]] | | [[Tool:SuicideHotline]] | ||
| [[Template:SuicideHotlineResource]] | | [[Template:SuicideHotlineResource]] | ||
| primary_phone, secondary_phone, text_service, online_chat_url, youth_hotline, emergency_services, languages, availability | | primary_phone, secondary_phone, text_service, online_chat_url, youth_hotline, emergency_services, languages, availability | ||
| Multi-country, uses region for states/provinces | |||
|- | |- | ||
| [[Tool:UpcomingEvents]] | | [[Tool:UpcomingEvents]] | ||
| [[Template:UpcomingEventsResource]] | | [[Template:UpcomingEventsResource]] | ||
| event_name, event_type, start_date, end_date, venue, address, admission, description, registration_url | | event_name, event_type, start_date, end_date, venue, address, admission, description, registration_url | ||
| Multi-country, region optional | |||
|- | |||
| [[Tool:UpcomingBTO]] | |||
| [[Template:UpcomingBTOResource]] | |||
| launch_month, location, unit_count, flat_types, classification | |||
| Single-country (Singapore only), region left empty | |||
|- | |- | ||
| Your tool! | | Your tool! | ||
| [[Template:YourToolResource]] | | [[Template:YourToolResource]] | ||
| Whatever fields you need! | | Whatever fields you need! | ||
| Remember: tool, country, region, last_verified are always required | |||
|} | |} | ||
Revision as of 08:27, 26 December 2025
Public AI is a structured knowledge base of tools and resources that AI assistants can access programmatically to help users with real-world tasks.
What is Public AI?
Public AI serves as a bridge between AI assistants (like Claude, ChatGPT, etc.) and real-world information that users need. Instead of AI assistants having outdated or incomplete information, they can query this wiki to get current, accurate, and localized data.
How It Works
- Structured Data: Information is stored using MediaWiki's Cargo extension, making it queryable like a database
- MCP Server: A FastMCP server reads from this wiki and exposes the data as tools that AI assistants can use
- AI Integration: When you ask an AI assistant a question (e.g., "What's the suicide hotline in Singapore?"), it queries this wiki and gives you current information
Use Cases
- Crisis Support: Get current hotline numbers and resources for mental health emergencies
- Transit Information: Real-time public transportation schedules and routes
- Events & Activities: Discover upcoming community events and festivals
- Location Services: Search for places and get geographic information
- And more...: Any information that benefits from being current, localized, and structured
Understanding Public AI Tools
Public AI has two types of tools, each serving different purposes:
| Wiki Tools | MCP Tools |
|---|---|
| Data lives in this wiki The MCP server reads and serves wiki content to AI assistants |
Code lives in GitHub repository Python functions that integrate with external APIs |
Examples:
|
Examples:
|
| Who can contribute: Anyone (no coding required) | Who can contribute: Developers (Python required) |
Best for:
|
Best for:
|
Browse All Tools
| Tool | description | community | has resources |
|---|---|---|---|
| Tool:SuicideHotline | International suicide prevention hotlines and crisis support resources | Singapore • Switzerland | Yes |
| Tool:UpcomingBTO | Upcoming Build-To-Order (BTO) public housing launches in Singapore | Singapore | Yes |
| Tool:UpcomingEvents | Community and public events happening in various locations | Singapore | Yes |
How to Contribute
Choose your contribution pathway based on what you want to do:
1️⃣ Add Data to an Existing Tool
Add or update localized data for an existing tool
Difficulty: Easy (no coding required)
Perfect for:
- Adding suicide hotline numbers for your country
- Contributing upcoming events in your region
- Adding local crisis resources
- Verifying and updating existing information
Quick start:
- Browse the tools above and find one with
has_resources=true - Check the tool's page for its custom resource template (e.g., Template:SuicideHotlineResource, Template:UpcomingEventsResource)
- Create or edit a page:
Resource:ToolName/YourLocation - Use the tool's specific resource template with the appropriate fields
- Fill in your local data and save!
💡 Tip: Look at existing resources for that tool to see what fields are available and how to format your data.
2️⃣ Create a New Wiki Tool
Design a new tool with a custom data structure
Difficulty: Medium
When to use this:
- You have location-specific data that communities can maintain
- The information doesn't require API calls
- You need a specific data structure for your use case
- Multiple people can verify and update the information
Step-by-step guide:
Step 1: Design Your Resource Template
Create a page: Template:YourToolNameResource
This template defines what data your tool collects. Each tool has complete freedom to define its own fields!
Example: Library Hours Resource Template
<noinclude>
This template stores library operating hours by location.
{{#cargo_declare:
_table=LibraryHoursResources
|tool=Page
|country=String
|region=String
|library_name=String
|weekday_hours=String
|weekend_hours=String
|holiday_hours=String
|phone=String
|website=URL
|last_verified=Date
}}
== Parameters ==
* '''tool''' - The tool page (should be "Tool:LibraryHours")
* '''country''' - Country name
* '''region''' - Region/state within country
* '''library_name''' - Name of the library
* '''weekday_hours''' - Operating hours Monday-Friday
* '''weekend_hours''' - Operating hours Saturday-Sunday
* '''holiday_hours''' - Special holiday hours
* '''phone''' - Contact phone number
* '''website''' - Library website URL
* '''last_verified''' - Date information was verified (YYYY-MM-DD)
[[Category:Templates]]
</noinclude>
<includeonly>
{| class="wikitable" style="width:100%;"
! colspan="2" | {{{library_name}}} - {{{country}}}{{#if:{{{region|}}}| ({{{region}}})}}
|-
| '''Weekday Hours''' || {{{weekday_hours}}}
|-
| '''Weekend Hours''' || {{{weekend_hours}}}
|-
{{#if:{{{holiday_hours|}}}|
{{!}} '''Holiday Hours''' {{!}}{{!}} {{{holiday_hours}}}
{{!}}-
|}}
| '''Phone''' || {{{phone}}}
|-
| '''Website''' || [{{{website}}} Visit website]
|}
{{#cargo_store:
_table=LibraryHoursResources
|tool={{{tool}}}
|country={{{country}}}
|region={{{region|}}}
|library_name={{{library_name}}}
|weekday_hours={{{weekday_hours}}}
|weekend_hours={{{weekend_hours}}}
|holiday_hours={{{holiday_hours}}}
|phone={{{phone}}}
|website={{{website}}}
|last_verified={{{last_verified}}}
}}
</includeonly>
Important note about region: Even if your tool doesn't use regions (e.g., it's only for one country), you MUST include the region field in your template. The
Main Page
Description:
Overview
Resources
No resources available yet.
Usage
template queries all resource tables expecting both country and region fields. You can leave it empty when using the template (e.g., |region=).
Key parts:
_table: Must beYourToolNameResources(this is important for the MCP server!)- Required baseline fields: ALL resource tables MUST include these fields:
tool=Page- The tool page referencecountry=String- Country nameregion=String- Region/state (can be left empty if not needed)last_verified=Date- Verification date
- Custom fields: Add whatever additional fields your tool needs with their types (String, Date, URL, Text, Integer, etc.)
- Display template: Create a nice visual display for the data
cargo_store: Saves the data to the Cargo database (must include all declared fields)
Step 2: Create the Tool Page
Create a page: Tool:YourToolName
{{Tool
|name=Library Hours
|description=Operating hours for public libraries by location
|community=Singapore
|has_resources=true
|resource_table=LibraryHoursResources
|overview=Provides current operating hours for public libraries, including weekday, weekend, and holiday schedules.
|usage=Query by library name or location to get current hours. All times are in local timezone.
}}
== About This Tool ==
This tool provides up-to-date operating hours for public libraries. Information is maintained by community contributors and library staff.
== Contributing ==
To add library hours for your location:
# Create a page: <code>Resource:LibraryHours/YourLocation</code>
# Use the {{tl|LibraryHoursResource}} template
# Verify hours from official library websites
# Update the last_verified date
== See Also ==
* [[Template:LibraryHoursResource]] - Template for adding library hours
[[Category:Tools]]
[[Category:Community]]
Important fields:
has_resources=true- Indicates this tool uses resourcesresource_table=YourToolNameResources- Must match your template's _table name
Step 3: Create Your First Resource
Create a page: Resource:YourToolName/Location
Use your new template to add the first resource!
Step 4: Update Cargo Tables
Critical step - makes your data queryable:
- Go to Special:CargoTables
- Find your new table (e.g.,
LibraryHoursResources) - Click "Recreate data"
- Your tool is now live!
3️⃣ Add a New MCP Tool
Implement a Python tool that integrates with external APIs
Difficulty: Advanced (requires Python/coding)
When to use this:
- You need to call external APIs (weather, transit, etc.)
- The tool requires real-time data
- Complex logic or data transformation is needed
Quick start:
- Fork the repository
- Add your
@mcp.tool()function tomain.py - Test locally with
python main.py - Submit a Pull Request
Example tools to create:
- Weather API integrations
- Stock market data
- Real-time transit for other countries
- News aggregators
Quick Decision Guide
| I want to... | Use this pathway |
|---|---|
| Add data to an existing tool | 1️⃣ Add Data to an Existing Tool |
| Create a tool with custom data fields | 2️⃣ Create a New Wiki Tool |
| Build an API integration or complex tool | 3️⃣ Add a New MCP Tool |
Detailed Examples
Example: Adding a Suicide Hotline Resource
The Tool:SuicideHotline uses Template:SuicideHotlineResource which has fields for:
- Multiple phone numbers (primary, secondary, youth hotline)
- Text services (SMS, WhatsApp)
- Online chat URLs
- Emergency services
- Languages supported
- Operating hours
Create a page: Resource:SuicideHotline/YourCountry
{{SuicideHotlineResource
|tool=Tool:SuicideHotline
|country=United States
|primary_phone=988
|primary_phone_description=National Suicide Prevention Lifeline - 24/7 support
|text_service=Text "HELLO" to 741741
|text_service_description=Crisis Text Line - 24/7 text support
|online_chat_url=https://988lifeline.org/chat
|online_chat_description=Online chat available 24/7
|languages=English, Spanish
|availability=24/7
|additional_info=Free and confidential. Veterans can press 1 for specialized support.
|last_verified=2025-12-26
}}
Example: Adding an Upcoming Event
The Tool:UpcomingEvents uses Template:UpcomingEventsResource which has fields for:
- Event name and type
- Start and end dates
- Venue and address
- Admission details
- Event description
- Registration URL
Create a page: Resource:UpcomingEvents/Singapore
{{UpcomingEventsResource
|tool=Tool:UpcomingEvents
|country=Singapore
|event_name=Singapore Art Week 2026
|event_type=Cultural
|start_date=2026-01-10
|end_date=2026-01-18
|venue=Multiple locations across Singapore
|address=Various galleries and museums
|admission=Mixed (some free, some ticketed)
|description=Annual celebration of visual arts with exhibitions, talks, and workshops
|registration_url=https://www.artweek.sg
|last_verified=2025-12-26
}}
{{UpcomingEventsResource
|tool=Tool:UpcomingEvents
|country=Singapore
|event_name=National Day Parade 2026
|event_type=National Celebration
|start_date=2026-08-09
|venue=Marina Bay Floating Platform
|admission=Free (ballot required)
|description=Singapore's National Day celebration with parade and fireworks
|last_verified=2025-12-26
}}
Note: You can add multiple resources to the same page!
Example: Adding BTO Launches (Single-Country Tool)
The Tool:UpcomingBTO uses Template:UpcomingBTOResource which has fields for:
- Launch month
- Location (estate/area)
- Unit count
- Flat types (2R, 3R, 4R, etc.)
- Classification (Standard/Plus/Prime)
This is an example of a single-country tool - it only applies to Singapore. Even though it doesn't use the region field, the field must still exist in the template schema. We simply leave it empty when creating resources.
Create a page: Resource:UpcomingBTO/Feb2026
{{UpcomingBTOResource
|tool=Tool:UpcomingBTO
|country=Singapore
|region=
|launch_month=February 2026
|location=Bukit Merah
|unit_count=1040
|flat_types=2R Flexi, 3R, 4R
|classification=Prime
|last_verified=2025-12-26
}}
{{UpcomingBTOResource
|tool=Tool:UpcomingBTO
|country=Singapore
|region=
|launch_month=February 2026
|location=Tampines (near MRT)
|unit_count=800
|flat_types=3R, 4R, 5R
|classification=Standard
|last_verified=2025-12-26
}}
Notice: |region= is empty but must be included!
How Resource Templates Work
Each tool defines its own resource template with exactly the fields it needs:
| Tool | Template | Custom Fields | Notes |
|---|---|---|---|
| Tool:SuicideHotline | Template:SuicideHotlineResource | primary_phone, secondary_phone, text_service, online_chat_url, youth_hotline, emergency_services, languages, availability | Multi-country, uses region for states/provinces |
| Tool:UpcomingEvents | Template:UpcomingEventsResource | event_name, event_type, start_date, end_date, venue, address, admission, description, registration_url | Multi-country, region optional |
| Tool:UpcomingBTO | Template:UpcomingBTOResource | launch_month, location, unit_count, flat_types, classification | Single-country (Singapore only), region left empty |
| Your tool! | Template:YourToolResource | Whatever fields you need! | Remember: tool, country, region, last_verified are always required |
This gives tool creators complete flexibility to structure their data appropriately.
Guidelines
Quality Standards
- Accuracy: All information must be current and verified
- Verification: Always include a
last_verifieddate - Completeness: Fill in all relevant fields for your resource
- Localization: Information should be specific to the country/region
- Neutrality: Present information objectively without bias
What Belongs Here
✅ Good candidates for Wiki Tools:
- Information that changes over time (phone numbers, schedules, events)
- Localized data (country/region-specific resources)
- Public services (hotlines, transit, emergency services, events)
- Data that AI assistants frequently need but may not have current info on
- Information that benefits from community verification
❌ Not appropriate:
- Personal or private information
- Copyrighted content without permission
- Information that rarely changes and is well-known (e.g., historical facts)
- Opinion pieces or subjective content
- Time-sensitive data that changes by the minute (use MCP tools with APIs instead)
Technical Documentation
For Developers
This wiki uses:
- MediaWiki: The underlying wiki platform
- Cargo Extension: Structured data storage and querying
- FastMCP Server: Exposes wiki data as MCP tools for AI assistants
Repository: pai-mcp-server
How the MCP Server Works
The MCP server provides three main functions for wiki tools:
1. list_tools_by_community(community)
- Lists all tools available for a community
- Queries the Tools table
2. use_tool(tool, country, region=None)
- Retrieves resources for a specific tool and location
- Automatically discovers the resource table structure using the Cargo API
- Works with any tool's custom resource template
- Example:
use_tool("SuicideHotline", "Singapore")
3. add_resource(tool, country, resource_data, region=None)
- Adds a new resource to a tool's resource page
- Validates fields against the tool's resource table schema
- Safely prepends content without overwriting existing data
- Example:
add_resource("UpcomingEvents", "Singapore", {"event_name": "Art Fair", "start_date": "2026-03-15", ...})
The server uses cargofields API to dynamically discover each tool's schema, so it works with any custom resource template!
Naming Conventions (Important!)
For the MCP server to work correctly with your tool:
- Tool page:
Tool:YourToolName - Resource template:
Template:YourToolNameResource - Cargo table:
YourToolNameResources(defined in template's_table) - Resource pages:
Resource:YourToolName/Location
The server automatically derives table and template names from the tool name, so consistency is critical!
API Access
Data can be queried via:
- MediaWiki API: Standard MediaWiki API endpoints (
https://wiki.publicai.co/w/api.php) - Cargo API: Query structured data using
action=cargoquery - Cargo Fields API: Discover table schemas using
action=cargofields - MCP Server: FastMCP server provides simplified access for AI assistants
Cargo Tables
View and manage the structured data:
- View all Cargo tables
- Tools table: Stores all tool definitions
- [ToolName]Resources tables: Each tool has its own resource table with custom fields
After editing resources: Remember to recreate the Cargo table data at Special:CargoTables to make your changes queryable!
Need Help?
- Creating templates: Study SuicideHotlineResource or UpcomingEventsResource as examples
- Cargo tables: Manage Tables
- MCP Server: GitHub Repository
- Questions: Open an issue in the repository or ask in discussions
Examples to Learn From
Well-designed Wiki Tools:
- Tool:SuicideHotline - Crisis resources with rich custom template
- Tool:UpcomingEvents - Events with date fields and venue information
Well-structured Resources:
- Resource:SuicideHotline/Singapore - Complete fields, multiple contact methods
- Resource:UpcomingEvents/Singapore - Multiple events on one page
Good Templates to Study:
- Template:SuicideHotlineResource - Complex template with many field types
- Template:UpcomingEventsResource - Date handling and optional fields