OParl API Overview
Comprehensive guide to the OParl API and its data structures
**The OParl (Open Parliament) API is a standardized interface for accessing parliamentary information systems**
This guide provides a comprehensive overview of the OParl API, its data structures, and how it integrates with the MCP server.
What is OParl?
OParl is a standardized web service interface that enables access to parliamentary data in a consistent format across different implementations. It provides structured access to:
- Parliamentary bodies (councils, committees, working groups)
- Organizations (political parties, groups, institutions)
- People (elected officials, staff, participants)
- Meetings (sessions, hearings, consultations)
- Documents (papers, resolutions, reports)
- Agenda items (topics, discussions, decisions)
OParl 1.1 Specification
The current version is OParl 1.1, which defines:
- Standardized data models for parliamentary information
- RESTful API endpoints for data access
- JSON-LD format for data exchange
- Consistent URL patterns across implementations
- Metadata standards for data provenance
Core OParl Objects
1. System
The root object that provides system-wide information and metadata.
Key Properties:
oparlVersion: Version of the OParl specificationbody: List of available parliamentary bodiescreated: System creation timestampmodified: Last modification timestamp
Example:
{
"type": "https://schema.oparl.org/1.1/System",
"oparlVersion": "https://schema.oparl.org/1.1/",
"body": ["https://oparl.example.org/body/1"],
"created": "2024-01-01T00:00:00+01:00",
"modified": "2024-01-15T10:30:00+01:00"
}
2. Body
Represents a parliamentary body such as a city council, committee, or working group.
Key Properties:
name: Official name of the bodyshortName: Abbreviated nameorganization: Associated organizationsmeeting: List of meetingslegislativeTerm: Current legislative period
Example:
{
"type": "https://schema.oparl.org/1.1/Body",
"id": "https://oparl.example.org/body/1",
"name": "Munich City Council",
"shortName": "MCC",
"organization": ["https://oparl.example.org/organization/1"],
"meeting": ["https://oparl.example.org/meeting/1"]
}
3. Organization
Represents political parties, groups, or institutional organizations.
Key Properties:
name: Organization nameshortName: Abbreviated namebody: Associated parliamentary bodymember: List of membersclassification: Type of organization
Example:
{
"type": "https://schema.oparl.org/1.1/Organization",
"id": "https://oparl.example.org/organization/1",
"name": "Social Democratic Party",
"shortName": "SPD",
"body": "https://oparl.example.org/body/1",
"member": ["https://oparl.example.org/person/1"]
}
4. Person
Represents elected officials, staff, or other participants.
Key Properties:
name: Full namegivenName: First namefamilyName: Last namebody: Associated parliamentary bodyorganization: Political party or groupemail: Contact email
Example:
{
"type": "https://schema.oparl.org/1.1/Person",
"id": "https://oparl.example.org/person/1",
"name": "Dr. Maria Schmidt",
"givenName": "Maria",
"familyName": "Schmidt",
"body": "https://oparl.example.org/body/1",
"organization": "https://oparl.example.org/organization/1"
}
5. Meeting
Represents a parliamentary session, hearing, or consultation.
Key Properties:
name: Meeting titlestart: Start date and timeend: End date and timelocation: Meeting venueagendaItem: List of agenda itemsparticipant: List of participants
Example:
{
"type": "https://schema.oparl.org/1.1/Meeting",
"id": "https://oparl.example.org/meeting/1",
"name": "City Council Session",
"start": "2024-01-15T14:00:00+01:00",
"end": "2024-01-15T18:00:00+01:00",
"location": "https://oparl.example.org/location/1",
"agendaItem": ["https://oparl.example.org/agendaitem/1"]
}
6. AgendaItem
Represents a topic or item on a meeting agenda.
Key Properties:
name: Item titlemeeting: Associated meetingorder: Position in agendaconsultation: Related consultationsresolution: Decision or resolution
Example:
{
"type": "https://schema.oparl.org/1.1/AgendaItem",
"id": "https://oparl.example.org/agendaitem/1",
"name": "Budget Discussion 2024",
"meeting": "https://oparl.example.org/meeting/1",
"order": 1,
"consultation": ["https://oparl.example.org/consultation/1"]
}
7. Paper
Represents documents, resolutions, or reports.
Key Properties:
name: Document titlereference: Official reference numberbody: Associated parliamentary bodydate: Publication datefile: Associated files
Example:
{
"type": "https://schema.oparl.org/1.1/Paper",
"id": "https://oparl.example.org/paper/1",
"name": "Budget Resolution 2024",
"reference": "2024/001",
"body": "https://oparl.example.org/body/1",
"date": "2024-01-15T00:00:00+01:00"
}
8. Consultation
Represents public consultations or feedback processes.
Key Properties:
name: Consultation titlepaper: Related documentauthoritative: Whether consultation is bindingstart: Start dateend: End date
Example:
{
"type": "https://schema.oparl.org/1.1/Consultation",
"id": "https://oparl.example.org/consultation/1",
"name": "Public Budget Consultation",
"paper": "https://oparl.example.org/paper/1",
"authoritative": true,
"start": "2024-01-01T00:00:00+01:00",
"end": "2024-01-31T23:59:59+01:00"
}
9. File
Represents attachments, media files, or documents.
Key Properties:
name: File namefileName: Original file namemimeType: File typesize: File size in bytesaccessUrl: Download URL
Example:
{
"type": "https://schema.oparl.org/1.1/File",
"id": "https://oparl.example.org/file/1",
"name": "budget_2024.pdf",
"fileName": "budget_2024.pdf",
"mimeType": "application/pdf",
"size": 1024000,
"accessUrl": "https://oparl.example.org/file/1/download"
}
10. Location
Represents meeting venues, addresses, or geographical locations.
Key Properties:
name: Location namedescription: Additional detailsgeojson: Geographical coordinatessubLocality: District or areapostalCode: Postal code
Example:
{
"type": "https://schema.oparl.org/1.1/Location",
"id": "https://oparl.example.org/location/1",
"name": "City Hall",
"description": "Main council chamber",
"geojson": {
"type": "Point",
"coordinates": [11.5761, 48.1374]
},
"postalCode": "80331"
}
API Endpoints
System Endpoints
GET /system- Get system informationGET /system/body- List all bodies
Body Endpoints
GET /body- List all bodiesGET /body/{id}- Get specific bodyGET /body/{id}/organization- List body organizationsGET /body/{id}/meeting- List body meetingsGET /body/{id}/person- List body members
Organization Endpoints
GET /organization- List all organizationsGET /organization/{id}- Get specific organizationGET /organization/{id}/member- List organization members
Person Endpoints
GET /person- List all peopleGET /person/{id}- Get specific personGET /person/{id}/membership- List person memberships
Meeting Endpoints
GET /meeting- List all meetingsGET /meeting/{id}- Get specific meetingGET /meeting/{id}/agendaitem- List meeting agenda itemsGET /meeting/{id}/participant- List meeting participants
Paper Endpoints
GET /paper- List all papersGET /paper/{id}- Get specific paperGET /paper/{id}/file- List paper files
Consultation Endpoints
GET /consultation- List all consultationsGET /consultation/{id}- Get specific consultation
File Endpoints
GET /file- List all filesGET /file/{id}- Get specific fileGET /file/{id}/download- Download file content
Location Endpoints
GET /location- List all locationsGET /location/{id}- Get specific location
Query Parameters
Most list endpoints support common query parameters:
limit- Maximum number of results (default: 20, max: 1000)offset- Number of results to skip (default: 0)search- Search term for filteringstart- Start date for filteringend- End date for filtering
Data Relationships
OParl objects are interconnected through references:
- System → Body (one-to-many)
- Body → Organization (one-to-many)
- Body → Person (one-to-many)
- Body → Meeting (one-to-many)
- Meeting → AgendaItem (one-to-many)
- Meeting → Person (many-to-many, via participants)
- Paper → File (one-to-many)
- AgendaItem → Consultation (one-to-many)
OParl Implementations
Various cities and institutions have implemented OParl:
- Generic API:
https://api.oparl.org - Munich:
https://oparl.muenchen.de - Cologne:
https://oparl.koeln.de - Hamburg:
https://oparl.hamburg.de - Berlin:
https://oparl.berlin.de
Each implementation may have:
- Different data availability
- Varying authentication requirements
- Custom extensions
- Different rate limits
Next Steps
- FastMCP Integration - How FastMCP connects to OParl
- MCP Components - Understanding MCP resources and tools
- Examples - Practical usage examples