Inspector schema coverage
The Knowledge Graph Explorer adds type-specific tabs to its object inspector, such as Database or MCP Server. This page explains when a tab appears, which types can get one, and how to find types that have none. It is for people who extend the Explorer or add new node types.
When a tab appears
Tabs come from a catalog of property groups in packages/robos-graph/lib/inspector-groups.js. A group has an id, a label, the types it applies to, the properties it displays, and the predicates of incoming references that count as children.
For a selected node, a group’s tab is shown when both conditions hold:
- One of the node’s
@typevalues is listed in the group’stypes, as an exact match. - The node has a recorded value for one of the group’s properties, or another node points at it with one of the group’s incoming predicates.
A title, a source path or other provenance alone never opens a type-specific tab. A node with no recorded domain data keeps the standard tabs: Overview, Query & Paths and JSON-LD, plus Topology and Impact when the node has relationships in the graph. Related objects are found through forward references and through the group’s inverse predicates. The same target is listed once, with the original predicate and direction. A reference to a node that is not in the graph is shown as unavailable. Long lists load 40 cards at a time.
The inspector shows what the graph records. It does not connect to MCP servers, run tools, or infer health, ownership or test results.
Groups
| Tab | Applies to |
|---|---|
| MCP Server | robos:MCPServer, robos:ToolProvider |
| Tool | robos:MCPTool |
| Resource | robos:MCPResource |
| Prompt | robos:MCPPrompt |
| Services | robos:Microservice, robos:Application, robos:DesktopApp, robos:ConsoleApp, robos:MobileApp, robos:FrontEndApp, robos:PCGame, robos:MobileGame, robos:DataPipeline, robos:Library |
| API & Contracts | robos:Contract, robos:ProtobufContract, robos:GraphQLContract, robos:APIEndpoint, robos:GRPCContract, robos:GraphQLSchema, robos:APIOperation |
| Application | robos:Microservice, robos:Application, robos:DesktopApp, robos:ConsoleApp, robos:MobileApp, robos:FrontEndApp, robos:PCGame, robos:MobileGame, robos:DataPipeline, robos:Library |
| Routes & Commands | robos:Application, robos:FrontEndApp, robos:DesktopApp, robos:ConsoleApp, robos:MobileApp, robos:WebRoute, robos:CLICommand, robos:CLIFlag |
| Database | robos:Database, robos:NoSQLDatabase, robos:DataStore, robos:DatabaseSchema, robos:DatabaseTable, robos:DatabaseColumn, robos:DatabaseIndex, robos:NoSQLCollection, robos:RelationalDatabase, robos:CacheStore, robos:DocumentStore, robos:KeyValueStore |
| Data Model | robos:DataModel, robos:SchemaModel, robos:DomainEntity |
| Messaging | robos:MessageBroker, robos:BrokerDefinition, robos:MessageTopic, robos:ConsumerGroup, robos:DataPipeline, robos:EventBus, robos:MessageQueue, robos:EventTopic |
| Deployment & Kubernetes | robos:KubernetesCluster, robos:Environment, robos:EnvironmentProfile, robos:GitOpsDeployment, robos:KubernetesNamespace, robos:KubernetesDeployment, robos:KubernetesService, robos:KubernetesIngress, robos:K8sCluster, robos:DeploymentEnvironment, robos:ArgoCDApplication |
| CI Pipeline | robos:CICDPipeline, robos:PipelineStage, robos:PipelineJob, robos:PipelineStep, robos:Pipeline |
| Source Control | robos:GitProjectOrganization, robos:GitRepository, robos:GitBranch, robos:PullRequest, robos:GitCommit, robos:GitTag, robos:GitOrganization, robos:Repository, robos:MergeRequest, robos:CommitRef |
| Work Items | robos:Project, robos:Epic, robos:Feature, robos:UserStory, robos:Task, robos:Subtask, robos:Bug, robos:Sprint, robos:Milestone, robos:ProductFeature, robos:Story, oslc_cm:ChangeRequest, robos:WorkItem, robos:Defect, oslc_cm:Defect |
| Organization | robos:Team, robos:GitProjectOrganization, robos:TaskServer, robos:Project, robos:GitOrganization |
| Testing | robos:TestingLibrary, robos:TestPlan, robos:TestSuite, robos:TestExecutionRecord, oslc_qm:TestCase, robos:TestFramework, oslc_qm:TestPlan, oslc_qm:TestSuite, oslc_qm:TestExecutionRecord |
| BDD | oslc_rm:Requirement, robos:Feature, robos:GherkinFeature, robos:GherkinBackground, robos:GherkinRule, robos:Scenario, robos:ScenarioStep, robos:ScenarioOutline, robos:ExamplesTable, robos:StepDefinition, robos:DataTable, robos:DocString, robos:ProductFeature, robos:BDDFeature, robos:Background, robos:Rule |
| Learning | robos:ELearning, robos:CertificateOfCompletion, robos:LearningModule, robos:LearningLesson, robos:HandsOnLab, robos:QuizAssessment, robos:CurriculumDefinition |
| Content & Structure | robos:FlowDiagram, robos:DocumentationPage, robos:InteractiveWalkthrough, robos:CodeSnippet, robos:DocSection, robos:DocArticle, robos:CodeSample |
| Agent & Skills | robos:AgentPersona, robos:AgentSkill, robos:PromptStrategy, robos:AIAgent, robos:PromptOptimizer, robos:PromptCompiler, robos:AIPromptTechnique |
| Build & Remote Execution | robos:BuildSystem, robos:RemoteExecutionCluster, robos:RemoteBuildCluster, robos:MonorepoBuild |
| Configuration | robos:ContextSource, robos:EnvironmentProfile, robos:SourceArtifact |
| Source Declaration | robos:SourceArtifact |
| Decisions | robos:ArchitectureDecisionRecord, robos:ADR, robos:ADROption |
The catalog also lists each group’s displayed properties. Read the source file for those.
Find types without a tab
Some types have no group, so selecting one of their nodes shows only the standard tabs. List the types that appear in a shape but in no group:
node -e "
const { GROUPS } = require('./packages/robos-graph/lib/inspector-groups');
const { BUILTIN_SHACL_SHAPES } = require('./packages/robos-graph/lib/shacl-validator');
for (const s of BUILTIN_SHACL_SHAPES)
for (const t of new Set([s.targetClass, ...(s.targetClasses || [])]))
if (!GROUPS.some(g => g.types.includes(t))) console.log(t);
"
At the time of writing the list includes robos:SearchIndex, robos:SearchCluster, robos:Documentation, the comment and discussion classes (robos:Comment, robos:DiscussionThread, robos:ReviewComment, robos:CommentAttachment), robos:VoiceCommand, and the cRPG, game and tabletop classes (robos:CRPG*, robos:Game*, robos:Tabletop*).
Add or change a group
Edit the GROUPS array in inspector-groups.js. Use exact compact type names such as robos:MCPServer, and only properties and predicates that exist in a shape or in packages/robos-graph/lib/relationships.js. Then run the catalog tests from the repository root:
npm --prefix packages/robos-test run test:inspector
tests/sdlc-graph/inspector-groups.test.js checks that every target class and alias of every shape appears in some group, and that every domain property of a shape is covered. That check currently fails for the types listed above. npm --prefix packages/robos-test run test:inspector:e2e runs the Electron tests for the inspector. They need Electron and a display.
MCP schema fields
For MCP servers, tools, resources and prompts the graph can record the protocol fields. robos:inputSchema, robos:outputSchema, robos:annotations, robos:toolAnnotations, robos:parameters and robos:arguments are stored as JSON-LD @json literals, so nested keys, arrays and booleans survive. A server can reference resources and prompts through robos:resourcesProvided and robos:promptsProvided. robos:registrationCondition and robos:availabilityStatus are metadata recorded in the graph, not live checks. The field definitions follow the MCP schema reference.
See also the inspector audit for the tabs that were removed because they showed demo data.