API
A read-only JSON API for accessing community data. No authentication required. CORS enabled.
Base URL
Endpoints
| Endpoint | Description |
|---|---|
/api/companies | List companies |
/api/companies/:slug | Get company |
/api/events | List events |
/api/events/:slug | Get event |
/api/groups | List groups |
/api/groups/:slug | Get group |
/api/jobs | List jobs |
/api/jobs/:slug | Get job |
/api/education | List education |
/api/education/:slug | Get education |
/api/news | List news |
/api/news/:slug | Get news article |
/api/people | List people |
/api/people/:slug | Get person |
/api/projects | List projects |
/api/projects/:slug | Get project |
/api/products | List products |
/api/products/:slug | Get product |
/api/technologies | List technologies |
/api/technologies/:slug | Get technology |
Pagination
List endpoints support pagination:
limit- Number of items (default: 20, max: 100)offset- Items to skip (default: 0)
Responses include a pagination object:
{
"data": [...],
"pagination": {
"total": 42,
"limit": 20,
"offset": 0,
"hasMore": true
}
}Responses also include RFC 5988 Link headers for navigation:
Link: <https://siliconharbour.dev/api/companies?limit=20&offset=20>; rel="next",
<https://siliconharbour.dev/api/companies?limit=20&offset=0>; rel="first"
OpenAPI Specification
MCP Server
An MCP (Model Context Protocol) server is available at /mcp for AI assistants and agents.
Endpoint: https://siliconharbour.dev/mcp
Tools
Three MCP tools are exposed. Expand any tool to see the functions it makes available — this listing is auto-generated from the bridge implementation so it always reflects the live server.
searchPublicexpand
Search the SiliconHarbour API schema to discover available entities and field shapes. Call this first to learn what data exists, then use query or execute to fetch it.
queryPublic8 functionsexpand
Execute JavaScript in a secure QuickJS sandbox to read SiliconHarbour data. Imports below are available from the 'siliconharbour' module. Each call hits the real database on-demand. Timeout: 10 seconds.
companies({ query?, limit?, offset? })education({ limit?, offset? })events({ upcoming?, limit?, offset?, query? })groups({ limit?, offset? })jobs({ query?, limit?, offset? })news({ query?, limit?, offset? })people({ query?, limit?, offset? })technologies({ limit?, offset? })executeAuthenticated27 functionsexpand
Like query, but also exposes sync, creation, review, and lifecycle functions. Requires an authenticated MCP session (apiToken). Timeout: 60 seconds.
companies({ query?, limit?, offset? })education({ limit?, offset? })events({ upcoming?, limit?, offset?, query? })groups({ limit?, offset? })jobs({ query?, limit?, offset? })news({ query?, limit?, offset? })people({ query?, limit?, offset? })technologies({ limit?, offset? })eventImportSources()jobImportSources()listImporterTypes()newsImportSources()syncAllSources({ type? }) where type is 'event'|'job'|'news' (omit to sync all)syncSource({ type, sourceId }) where type is 'event'|'job'|'news'asyncSyncAllSources({ type? }) where type is 'event'|'job'|'news' (omit to sync all)getAsyncSync(runId)listAsyncSyncs()createEntity({ type, ...fields })deleteEntity({ type, id })updateEntity({ type, id, ...fields })getEntity({ type, by, value }) where by is 'id'|'slug'|'name'listEntities({ type, filter? }) where filter is 'manual'|'pending'|'all'getTechNLJob(link)listTechNLJobs()searchIndeedJobs({ query?, location?, limit?, hoursOld? })searchLinkedInJobs({ query?, location?, limit? })reviewEntity({ type, id, action })Setup (Claude Desktop / OpenCode)
Public access — no token needed:
{
"mcpServers": {
"siliconharbour": {
"url": "https://siliconharbour.dev/mcp"
}
}
}Example queries
// Upcoming events
import { events } from "siliconharbour";
export default await events({ upcoming: true, limit: 5 });// Jobs filtered by keyword
import { jobs } from "siliconharbour";
export default await jobs({ query: "developer", limit: 10 });// Cross-entity query
import { events, companies, groups } from "siliconharbour";
const [upcoming, cos, grps] = await Promise.all([
events({ upcoming: true }),
companies({ limit: 5 }),
groups({ limit: 5 }),
]);
export default {
upcoming: upcoming.length,
companies: cos.map((c) => c.name),
groups: grps.map((g) => g.name),
};Feeds
RSS feeds and an iCal calendar are also available. See Stay Connected for details.
/feed.rss- Combined RSS feed/events.rss- Events RSS feed/news.rss- News RSS feed/jobs.rss- Jobs RSS feed/calendar.ics- iCal calendar subscription