API
The JSON API provides read-only access to community data without authentication and supports cross-origin requests.
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
AI assistants and agents can connect to the MCP (Model Context Protocol) server at /mcp.
Endpoint: https://siliconharbour.dev/mcp
Tools
The server has two public tools and one authenticated tool. Expand a tool to see its available functions. This list comes from the bridge implementation and stays in sync with the 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?, companyId?, sourceId?, status?, isTechnical?, workplaceType?, location?, lastSeenAfter? })news({ query?, limit?, offset? })people({ query?, limit?, offset? })technologies({ limit?, offset? })executeAuthenticated30 functionsexpand
Like query, but also exposes sync, creation, review, and lifecycle functions. Requires an OAuth-authorized MCP session with the mcp:write scope. Timeout: 60 seconds.
companies({ query?, limit?, offset? })education({ limit?, offset? })events({ upcoming?, limit?, offset?, query? })groups({ limit?, offset? })jobs({ query?, limit?, offset?, companyId?, sourceId?, status?, isTechnical?, workplaceType?, location?, lastSeenAfter? })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 })deleteEventTag({ id })saveEventTag({ id?, name, color })updateEntity({ type, id, ...fields })eventTags()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 })Connect an MCP client
Add the endpoint to any client that supports remote MCP servers:
{
"mcpServers": {
"siliconharbour": {
"url": "https://siliconharbour.dev/mcp"
}
}
}You can use search and query without signing in. These tools provide read-only access to public SiliconHarbour data.
OAuth is optional. To use the execute tool, start your MCP client's sign-in action and log in with your SiliconHarbour account. The client discovers the OAuth endpoints automatically and opens the site's login and consent flow. You do not need an API key or shared secret.
The execute tool requires the mcp:write OAuth scope and an administrator account. It can run imports, create or update records, and perform review actions. An invalid or expired OAuth session is rejected instead of falling back to public access.
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