Skip to content

Projects ​

Resolve a project before any tool that takes project_id. If the user names a project or a nickname, call search_projects first. If resolved is set, use that id. If several matches come back, ask which name. Never pass a name as project_id.

List Projects ​

list_projects · intangia:read

No arguments. Returns { "projects": [...] } for projects the user belongs to, including role and the latest brief. Same rows as List Projects.

Search Projects ​

search_projects · intangia:read

ArgumentNotes
qName, partial name, or nickname. Pass the words the user used.
limitOptional. Default 5, maximum 8.
json
{
  "query": "kinase",
  "resolved": { "id": "2c0b1a44-7e1d-4f0a-9c3b-6d5e4f3a2b10", "name": "Kinase landscape" },
  "total": 1,
  "matches": [
    {
      "id": "2c0b1a44-7e1d-4f0a-9c3b-6d5e4f3a2b10",
      "name": "Kinase landscape",
      "role": "owner",
      "matched_on": "name"
    }
  ]
}

resolved is set when one project is the clear match. matched_on is name or brief. When resolved is null, ask the user which matches name they mean.

Create a Project ​

create_project · projects:write

ArgumentNotes
briefThe user's brief, verbatim. The server extracts scope from it.
nameOptional. If omitted, the server uses the title it extracted.
confirmed_termsPhrases the user explicitly chose after you asked. Not ids, and not phrases they did not confirm.

Do not call search_keywords first, and do not invent keywords. A blank brief returns Missing brief.

When nothing in the brief matches a scope keyword, or terms remain unmatched, the project is not created (or is created but still needs a choice):

json
{
  "created": false,
  "needs_confirmation": true,
  "name": "Kinase landscape",
  "goals": ["target"],
  "scope": { "keywords": [], "organizations": [] },
  "unmatched": [{ "term": "example term" }],
  "unmatched_organizations": []
}

Ask which option to use, then call create_project again with the same brief and those phrases as confirmed_terms.

When at least one scope keyword matches, the project is created and the initial scan starts:

json
{
  "created": true,
  "needs_confirmation": false,
  "id": "2c0b1a44-7e1d-4f0a-9c3b-6d5e4f3a2b10",
  "name": "Kinase landscape",
  "role": "owner",
  "setup_url": "https://app.intangia.co/projects/2c0b1a44-7e1d-4f0a-9c3b-6d5e4f3a2b10/overview?setup=1",
  "goals": ["target"],
  "scope": { "keywords": [], "organizations": [] },
  "unmatched": [],
  "unmatched_organizations": []
}

If a project id already exists, call update_project for scope changes. Do not send the user to setup_url to pick scope. Once an id exists, call setup_project to configure scoring.

Update a Project ​

update_project · projects:write

You must be an editor or owner.

ArgumentNotes
project_idUUID
briefReplacement brief. Does not re-extract scope.
add_scope_termsPhrases to add. The server matches them.
remove_scope_termsKeyword names to remove, case-insensitive.
add_organizationsOrganisation names to add. The server matches them.
remove_organizationsOrganisation names to remove, case-insensitive.

At least one change is required. Otherwise the error is Nothing to update. Do not pass keyword ids.

The result includes id, name, brief, setup_url, scope, unmatched, unmatched_organizations, and needs_confirmation. If unmatched terms remain, ask which option to use and call the tool again. A failed scan adds scan_error. The update is still saved.

Set Up Scoring ​

setup_project · projects:write

You must be an editor or owner. This is the same scoring setup as the project setup dialog. Show the returned question and options. Do not choose answers yourself.

ArgumentNotes
project_idUUID
actionplan, answer, turn, focus, sample, or finish. Default plan.
question_idRequired for answer and focus. Use question_id from the previous result.
valueOption value the user chose. Required for answer.
messageThe user's reply in their own words. Required for turn.

plan starts or resumes the conversation. Pass answer when the reply matches an option value. Otherwise pass turn. sample compiles a draft and does not run the in-app example stream. When complete is true, ask whether to finish, then call finish.

json
{
  "status": "active",
  "finished": false,
  "complete": false,
  "question": "Which ranking should scoring use?",
  "options": [{ "value": "most_promising", "label": "Most promising" }],
  "question_id": "ranking",
  "checklist": [{ "id": "ranking", "label": "Ranking", "status": "current", "summary": null }],
  "error": null
}

Do not send the user to setup_url to do this setup.

Actionable insights for better R&D and strategy decisions.